C# 简化此过程,以读取由特殊分隔符连接的值的文本文件
有没有人能给我的第三个问题提出一个更好的解决方案,但不要太复杂,因为我还是新手? i、 e.读取带有特殊分隔符的值的文本文件,并输出到csv中 Txt文件:C# 简化此过程,以读取由特殊分隔符连接的值的文本文件,c#,csv,C#,Csv,有没有人能给我的第三个问题提出一个更好的解决方案,但不要太复杂,因为我还是新手? i、 e.读取带有特殊分隔符的值的文本文件,并输出到csv中 Txt文件: one¬two¬thr,ee¬four two¬three¬fo,ur¬five 预期成果: one, two, thr,ee, four two, three, fo,ur, five 每个值都应该位于自己的列中,但可以有逗号,将分隔符视为列 代码: //main方法 var txtFile=File.ReadAllLines(“te
one¬two¬thr,ee¬four
two¬three¬fo,ur¬five
预期成果:
one, two, thr,ee, four
two, three, fo,ur, five
每个值都应该位于自己的列中,但可以有逗号,将分隔符视为列
代码:
//main方法
var txtFile=File.ReadAllLines(“test.txt”);
var meta=新列表();
foreach(txtFile中的var行)
{
var first=行。子字符串(0,GetNthIndex(行,,,,1));
var second=第二行子串(GetNthIndex(第,,,,1行)+1,GetNthIndex(第,,,2行)-GetNthIndex(第,,,1行)-1);
第三个变量=行。子字符串(GetNthIndex(行,,,,,2)+1,GetNthIndex(行,,,,3)-GetNthIndex(行,,,,2)-1);
第四个变量=行子字符串(行LastIndexOf(',')+1);
添加(“\”+第一+“\”+”、“+“\”+第二+“+”、“+”\“+第三+”、“+”、“+”、“+”\+第四+”);
}
File.writeAllines(“meta.csv”,meta);
//外主法
公共静态int GetNthIndex(字符串l、字符c、int n)
{
int计数器=0;
对于(变量i=0;i
感谢所有回复使用
string.Split
和string.Join
。这是我的照片
var txtFile = File.ReadAllLines("test.txt");
var meta = new List<string>();
foreach (var line in txtFile)
{
var values = line.Split(new[] { '¬' });
meta.Add(string.Join(",", values.Select(v => "\"" + v + "\"")));
}
File.WriteAllLines("meta.csv", meta);
var txtFile=File.ReadAllLines(“test.txt”);
var meta=新列表();
foreach(txtFile中的var行)
{
var值=line.Split(新[]{',});
添加(string.Join(“,”,values.Select(v=>“\”+v+“\”));
}
File.writeAllines(“meta.csv”,meta);
要做到这一点,您必须:
List<string> lLines = File.ReadAllLines("test.txt").Select(line => "\"" + string.Join("\",\"", line.Split('¬')) + "\"").ToList();
File.WriteAllLines("meta.csv", lLines);
List lLines=File.ReadAllLines(“test.txt”)。选择(line=>“\”+string.Join(“\”,\”,line.Split(“,”)+“\”).ToList();
writeAllines(“meta.csv”,lLines);
或者是没有LINQ的更简单的解决方案:
string[] aLines = File.ReadAllLines("test.txt");
List<string> lMeta = new List<string>();
foreach (string sLine in aLines)
{
string[] aItems = sLine.Split('¬');
lMeta.Add("\"" + string.Join("\",\"", aItems) + "\"");
}
File.WriteAllLines("meta.csv", lMeta);
string[]aLines=File.ReadAllLines(“test.txt”);
List lMeta=新列表();
foreach(直线中的字符串sLine)
{
字符串[]aItems=sLine.Split(“,”);
lMeta.Add(“\”+string.Join(“\”,\”,aItems)+“\”);
}
writeAllines文件(“meta.csv”,lMeta);
字符串.拆分
?但实际上,您可能需要寻找CSV解析器,它们可以处理不同的分隔符well@juharr谢谢,我将尝试使用string.Split。p、 我这样做更多的是为了练习学习,所以不想使用任何外部库或作为一行File.writeAllines(“meta.csv”,File.ReadLines(“test.txt”).Select(line=>string.Join(“,”,line.Split(“,”),Select(v=>$”\“{v}\”))
。谢谢Justin,这看起来确实更好!但是,您是否可以简化您的解决方案,使其不使用linq?由于我是一名新手,尚未达到学习阶段:(
string[] aLines = File.ReadAllLines("test.txt");
List<string> lMeta = new List<string>();
foreach (string sLine in aLines)
{
string[] aItems = sLine.Split('¬');
lMeta.Add("\"" + string.Join("\",\"", aItems) + "\"");
}
File.WriteAllLines("meta.csv", lMeta);