2017-03-02 14 views
0

私は処理後に2000個以上の出力ファイルを生成する約100個の入力ファイルを持っています。私は入力ファイルの名前に基づいて出力ファイルに名前を付けることを試みています。入力ファイルに関してファイル名を書く方法

Start cmd /k "G:Path\eachGeo.bat G:\Path\InputGeo\*.csv" 

入力が異なるパスに格納され.batおよび入力を実行することによりcmdを介して読み出されます。私は現在のシステム時刻に基づいて、出力ファイルに名前を付けるためにTime.now.to_i.to_sを使用しています上記のコード行で

outputfilename = 'Path\outputGeo\\' + Time.now.to_i.to_s + 
       '_' + eachTag[45..54] + '_output.csv' 

しかし、現在の時刻をシステムから入力ファイル名に変更したいとします。

Dir.glob("path/*.csv") do |path| 
    CSV.open(path) do |csv_in| 
    # ... 

    out_path = "output_path/%s_%s.csv" % [ 
     File.basename(path, ".csv"), 
     each_tag[45..54] 
    ] 

    CSV.open(out_path, "w") do |csv_out| 
     # ... 
    end 
    end 
end 

これは本当に簡単な例です:

+1

パス名に '/'を使用すると、大量のエスケープ処理を必要としないので、はるかに簡単です。また、変数名をすべて 'lower_case'にしておきましょう。そうすれば' each_tag'を組み込むべきです。 – tadman

+1

あなたは 'name =" path /%d_%s_output.csv "%[Time.now.to_i、each_tag [45..54]]を実行することもできます。これははるかに面倒ではありません。これは単に '%'省略表現を使った 'sprintf'表記です。 – tadman

+0

ありがとうございます。 –

答えて

1

通常、あなたは、元のファイルパスの関連部分を抽出するためにFile.basenameのようなものを使っているところ、このようにそれに取り組むだろう。私は入力ファイルと同じディレクトリに出力ファイルを置くことを避けるので、プログラムを2度目に実行したときに誤って読み込まれることはありません。

+0

答えをありがとう、ありがとうございました。今。入力は異なるフォルダにあり、出力も異なっています。私はcmd-batファイルで実行して読みました。 –

+0

これは実質的に全く新しい質問です。バッチファイルはこれと何をする必要がありますか? – tadman

+0

プログラム全体では、検索クエリを使用してWebをスクラップしています。バットは、入力ファイルから入力ジオ座標を読み取り、クエリに渡し、検索された出力は別のCSVに格納されます。全体のプロセスは正常に動作します。しかし、検索地理的な場所は100以上で、出力ファイルの名前を付けることが課題になっています。だから、私は入力ファイル名に関して出力に名前をつけようとしています。 –

関連する問題