我有一个 Excel 电子表格正在用 C# 转换为 CSV 文件,但在处理换行符时遇到问题。例如:
"John","23","555-5555"
"Peter","24","555-5
555"
"Mary,"21","555-5555"
当我读取 CSV 文件时,如果记录不是以双引号 (") 开头,则会错误地出现一个换行符,我必须将其删除。我有一些来自互联网的 CSV 阅读器类,但我担心他们会在换行符上失败。
我应该如何处理这些换行符?
非常感谢大家的帮助。
这是我到目前为止所做的。我的记录格式固定,都是以
开头JTW;...;....;...;
JTW;...;...;....
JTW;....;...;..
..;...;... (wrong record, line break inserted)
JTW;...;...
所以我在每一行的 [3] 位置检查了 ;
。如果是真的,我写;如果为假,我将追加到最后(删除换行符)
我现在遇到了问题,因为我正在将文件另存为 txt。
顺便说一句,我通过在 Excel 中另存为 csv 将 Excel 电子表格转换为 csv。但我不确定客户是否这样做。
所以文件作为TXT是完美的。我检查了记录和总数。但现在我必须将它转换回 csv,我真的很想在程序中这样做。有人知道怎么做吗?
这是我的代码:
namespace EditorCSV
{
class Program
{
static void Main(string[] args)
{
ReadFromFile("c:\\source.csv");
}
static void ReadFromFile(string filename)
{
StreamReader SR;
StreamWriter SW;
SW = File.CreateText("c:\\target.csv");
string S;
char C='a';
int i=0;
SR=File.OpenText(filename);
S=SR.ReadLine();
SW.Write(S);
S = SR.ReadLine();
while(S!=null)
{
try { C = S[3]; }
catch (IndexOutOfRangeException exception){
bool t = false;
while (t == false)
{
t = true;
S = SR.ReadLine();
try { C = S[3]; }
catch (IndexOutOfRangeException ex) { S = SR.ReadLine(); t = false; }
}
}
if( C.Equals(';'))
{
SW.Write("\r\n" + S);
i = i + 1;
}
else
{
SW.Write(S);
}
S=SR.ReadLine();
}
SR.Close();
SW.Close();
Console.WriteLine("Records Processed: " + i.ToString() + " .");
Console.WriteLine("File Created SucacessFully");
Console.ReadKey();
}
}
}
最佳答案
CSV 有预定义的处理方式。该网站提供了一个易于阅读的标准解释 way to handle all the caveats of CSV .
然而,确实没有理由不使用可靠的开源库来读写 CSV 文件,以避免犯非标准错误。 LINQtoCSV是我最喜欢的图书馆。它支持以干净简单的方式进行读写。
或者,this SO question on CSV libraries将为您提供最受欢迎的选择列表。
关于c# - 如何使用 C# 处理 CSV 文件中的换行符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179157/