C# 简化此过程,以读取由特殊分隔符连接的值的文本文件

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

有没有人能给我的第三个问题提出一个更好的解决方案,但不要太复杂,因为我还是新手? 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(“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);

要做到这一点,您必须:

  • 读取“test.txt”中的所有行
  • 每行用“,”分开
  • 用新的分隔符逗号连接拆分结果。请注意,您必须在每个单元格*上填充“
  • 将新行写入“meta.csv”
  • *使用每个元素之间指定的分隔符连接字符串数组的所有元素。本例中的分隔符是逗号(,),两边用双引号(“)填充。别忘了用两边的双引号再次填充结果字符串。例如:给定一个[x1,x2,x3]的列表,结果将是“x1”,“x2”,“x3”,因为分隔符是“,”,我们用两边的附加引号填充结果

    试试这个:

    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);