0

CSV に変換したいテキスト ファイルがあります。EXCEL インポート ウィザードでファイルを調べると、列と行は次の図のようになります。

ここに画像の説明を入力

ファイルを読み取って .csv としてファイルに書き込むと、強調表示された行に表示されるように、下の画像のようになります。

ここに画像の説明を入力

ファイル内の一部のデータに複数のコンマが含まれていることに気付きました。これは、行データが不足しています。これは私を超えています。

次のコードを使用しています。

class Program
{
static void AddComma(string s, TextWriter writer)
{
    foreach (string line in s.Replace("\"", "").Split('\n'))
    {
        for (int i = 0; i < line.Length; i++)
        {
            if (i > 0)
            writer.Write(line[i]);
        }
        writer.WriteLine();
    }
}


static void Main(string[] args)
{
    TextReader reader = new StreamReader(@"C:\folder\sample.txt");
    string a = reader.ReadToEnd();
    reader.Close();

    FileStream aFile = new FileStream(@"C:\folder\sample.csv", FileMode.Create);
    AddComma(a, new StreamWriter(aFile));
    aFile.Close();


}
}

見つかったソリューションの更新:

次のコード行を変更しただけです。Replace() メソッドを削除しました。

これから:foreach (string line in s.Replace("\"", "").Split('\n'))

これに:foreach (string line in s.Split('\n'))

また、配列はゼロから始まるので、カウンターまたは int の開始点を変更しました: これの代わりに意味:

for (int i = 0; i < line.Length; i++)

私はこれを持っています:

            for (int i = -1; i < line.Length; i++)
            {
                if (i > -1)
                writer.Write(line[i]);
            }

これにより、ゼロから始まるファイルの最初の列も確実に取得されます。

みんな、ありがとう。

4

1 に答える 1

1

問題は、区切りの引用符を取り除いていることです。CSV ファイルには、引用された値を含めることができます。値にカンマがある場合は、引用符で囲む必要があります。

あなたの例では、ファイルはファイル拡張子を除いて既に CSV 形式になっているようです。実際の本番ファイルがより複雑で、より多くのフォーマットが必要かどうかはわかりません。ただし、この例では、単にファイルの名前を変更する必要があります。

かなり標準的な仕様については、 RFC 4180を参照してください。少し濃厚です。

于 2013-08-02T04:32:33.150 に答える