2011-01-17 6 views
0

この質問はウェブ上で何百万回も聞かれたようですが、私にとってはうまくいく答えが見つかりません。CSVファイルの行にテキストを追加します

基本的には、複数の列(たとえば2つ)を持つCSVファイルがあります。プログラムは、最初の列の値を取得してCSVファイルの各行を調べ、2番目の列に配置する値をユーザーに確認します。これはWindows 6を実行しているハンドヘルド上で行われます。私はC#を使って開発しています。

これは簡単なことです。しかし、私は行にテキストを追加することはできません。

私は使用している.NetバージョンではSystem.Data.Oledbがis notであるため、OleDbを使用できません。私は別のCSVファイルを使用することができ、各行を完了すると、それを別のCSVファイルに書き込みます。しかし、その問題は次のとおりです。最後に作成されたファイルには、すべての行が含まれている必要があります(半分の長さにしてしまうとどうなりますか)。そして、もし彼らが帰ってきたら、この別の時間をやり続けて、どこからやり直すべきかをプログラムがどのように知っているのでしょうか。

答えて

1

すべての行について、出力ファイルを開き、新しい行を追加して出力ファイルを閉じます。再起動するには、前の実行から既存の出力ファイルの行数を数えます。これは、入力ファイルの開始を示します(つまり、入力ファイルの行数をスキップします)。

編集:開始時に、System.IO.File.Copyを使用して入力ファイルを出力ファイルにコピーします。これにより、すべてのファイルに障害が発生することがあります。入力ファイルを開き、行を読み込んで変換し、File.ReadAllLinesを使用して出力ファイルのすべてを配列に読み込み、配列内の正しいインデックスで変更した行を置き換え、File.WriteAllLinesを使用して書き出します新しい出力ファイル

このような何か:あなたの助けを

string inputFileName = ""; // Use a sensible file name. 
string outputFileName = ""; // Use a sensible file name. 
File.Copy(inputFileName, outputFileName, true); 
using (StreamReader reader = new StreamReader(inputFileName)) 
{ 
    string line = null; 
    int inputLinesIndex = 0; 
    while ((line = reader.ReadLine()) != null) 
    { 
     string convertedLine = ConvertLine(line); 
     string[] outputFileLines = File.ReadAllLines(outputFileName); 
     if (inputLinesIndex < outputFileLines.Length) 
     { 
      outputFileLines[inputLinesIndex] = convertedLine; 
      File.WriteAllLines(outputFileName, outputFileLines); 
     } 
     inputLinesIndex++; 
    } 
} 
+0

おかげで、しかしこのdoesntのは、エンドファイルは、元からすべての行が含まれている必要がある問題を解決します。だから、彼らが戻ったり、バケツを引っ張ったりすると、ファイルは元のファイルと同じですが、一定量の行が埋め込まれています – MichaelMcCabe

+0

最後のファイルには元の行がすべて含まれます。入力ファイル(元のファイル)を開き、行を読み込み、必要に応じて行を変換し、出力ファイルを開き、変換後の行を出力ファイルに追加し、出力ファイルを閉じて繰り返します(次の行を読み込みます)。バッテリーを引き出すと、出力ファイルにはその行に書き込まれたすべての行が表示されますので、中断した箇所を続けることができます。 – Polyfun

+0

申し訳ありませんが、私は非常に明確ではありませんでした。私は元のファイルからすべてを含むために、最終ファイルが必要です。完了しなかったとしても、最終ファイルにはすべてが含まれている必要があります。 (このCSVファイルは他の場所で使用されます)。したがって、入力ファイルに600行が含まれていれば100となり、出力ファイルには最初の100行が600行含まれている必要があります。 – MichaelMcCabe

関連する問題