med*_*eda 3 c# csv parsing textfield
我写了一个小函数,它逐行使用textField读取csv文件,将其编辑为特定字段,然后将其写回CSV文件.
这是代码:
private void button2_Click(object sender, EventArgs e)
{
String path = @"C:\file.csv";
String dpath = @"C:\file_processed.csv";
List<String> lines = new List<String>();
if (File.Exists(path))
{
using (TextFieldParser parser = new TextFieldParser(path))
{
String line;
parser.HasFieldsEnclosedInQuotes = true;
parser.Delimiters = new string[] { "," };
while ((line = parser.ReadLine()) != null)
{
string[] parts = parser.ReadFields();
if (parts == null)
{
break;
}
if ((parts[12] != "") && (parts[12] != "0"))
{
parts[12] = parts[12].Substring(0, 3);
//MessageBox.Show(parts[12]);
}
lines.Add(line);
}
}
using (StreamWriter writer = new StreamWriter(dpath, false))
{
foreach (String line in lines)
writer.WriteLine(line);
}
MessageBox.Show("CSV file successfully processed ! ");
}
}
Run Code Online (Sandbox Code Playgroud)
我想编辑的字段是第12个(部分[12]):
for example : if parts[12] = 000,000,234 then change to 000
Run Code Online (Sandbox Code Playgroud)
创建文件的问题是它不编辑文件而一半的记录丢失.我希望有人可以指出错误.
你打电话给parser.ReadFields()
和parser.ReadLine()
. 它们中的每一个都将光标前进一个.这就是为什么你错过了一半的行.更改while
为:
while(!parser.EndOfData)
Run Code Online (Sandbox Code Playgroud)
然后添加parts = parser.ReadFields();
到循环的末尾.没有这就是你没有看到编辑的原因.
你也可以删除:
if (parts == null)
{
break;
}
Run Code Online (Sandbox Code Playgroud)
由于您不再拥有line
,您需要使用这些字段来跟踪您的结果:
lines.Add(string.Join(",", parts));//handle string escaping fields if needed.
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4149 次 |
最近记录: |