我有一个在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
每行的位置。如果为true,我将写入;如果为false,我将附加到最后一项(去掉换行符)
我现在遇到了问题,因为我要将文件另存为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();
}
}
}
发布于 2021-03-02 07:24:05
对于CSV中存在的换行符,必须有一个未闭合的左双引号。假设所有CSV单元格都必须打开和关闭双引号,只需检查是否有奇数个引号
my_string.Count(c => c == '"') % 2 == 1
如果是这样的话,继续阅读,直到你得到偶数。
https://stackoverflow.com/questions/1179157
复制相似问题