1

私は Microsoft.VisualBasic.FileIO.TextFieldParsercsvファイルを読み込んで編集し、解析するために使用しています。

問題は、解析後に引用符が保持されていないことです。

使用してみparser.HasFieldsEnclosedInQuotes = true;ましたが、何らかの理由で引用符を保持していないようです。

この問題は、フィールドに引用符が含まれていると壊れます。たとえば、次のようになります。

 "some, field" 

 some, field 

2 つの別個のフィールドとして

これが私の方法です

public static void CleanStaffFile()
    {
        String path = @"C:\file.csv";
        String dpath = String.Format(@"C:\file_{0}.csv",DateTime.Now.ToString("MMddyyHHmmss"));
        List<String> lines = new List<String>();

        if (File.Exists(path))
        {
            using (TextFieldParser parser = new TextFieldParser(path))
            {
                parser.HasFieldsEnclosedInQuotes = true;
                parser.Delimiters = new string[] { "," };

                while (!parser.EndOfData)
                {
                    string[] parts = parser.ReadFields();

                    if (parts == null)
                    {
                        break;
                    }

                    if ((parts[12] != "") && (parts[12] != "*,116"))
                    {
                        parts[12] = parts[12].Substring(0, 3);
                    }
                    else
                    {
                        parts[12] = "0";
                    }

                    lines.Add(string.Join(",", parts));
                }
            }

            using (StreamWriter writer = new StreamWriter(dpath, false))
            {
                foreach (String line in lines)
                    writer.WriteLine(line);
            }

        }

        MessageBox.Show("CSV file successfully processed :\n");
    }
4

2 に答える 2

1

で変更した後に引用符を付けたいstring.Join(",", parts)ですか?セパレーターを含むフィールドのみが以前に引用符で囲まれていたので、それは簡単です。の前にもう一度追加するだけString.Joinです。

だから前に(そして望ましい):

"some, field" 

後 (望ましくない):

some, field 

これはうまくいくはずです:

string[] fields = parser.ReadFields();
// insert your logic here ....
var newFields = fields 
    .Select(f => f.Contains(",") ? string.Format("\"{0}\"", f) : f);
lines.Add(string.Join(",", newFields));

編集

コンマが含まれていなくても引用符を付けたい

次に、さらに簡単です。

var newFields = fields.Select(f => string.Format("\"{0}\"", f));
于 2013-08-22T14:37:12.800 に答える