C# 如何使用C用一个逗号替换文件中的多个制表符#

C# 如何使用C用一个逗号替换文件中的多个制表符#,c#,csv,C#,Csv,我正在尝试从.txt文件创建CSV。该文件包含以制表符分隔的数据,但在某些情况下有多个制表符。我目前能够处理单个制表符到逗号的转换,但当我遇到多个制表符时,我会用多个逗号替换它,这会把电子表格弄得一团糟。这是我目前的代码: private void ConvertToCSV(ListBox listBox) { string txtpath = DIRPATH + listBoxFiles.SelectedItem + ".txt";

我正在尝试从.txt文件创建CSV。该文件包含以制表符分隔的数据,但在某些情况下有多个制表符。我目前能够处理单个制表符到逗号的转换,但当我遇到多个制表符时,我会用多个逗号替换它,这会把电子表格弄得一团糟。这是我目前的代码:

private void ConvertToCSV(ListBox listBox)
        {
            string txtpath = DIRPATH + listBoxFiles.SelectedItem + ".txt";
            string csvpath = DIRPATH + listBoxFiles.SelectedItem + ".csv";

            // Read through rows in the text file and replace tabs with 
            // commas

            var lines = File.ReadAllLines(txtpath);
            var csv = lines.Select(row => string.Join(",", row.Split('\t')));

            // Replace the .txt extention with .csv

            File.WriteAllLines(txtpath, csv);
            System.IO.File.Move(txtpath, csvpath);

        }
任何帮助都将不胜感激

编辑:这是我在txt文件中的内容:
在运行上述代码后,这是Excel中的结果:

首先,我使用REGEX将多个选项卡替换为单个选项卡

例如,对于这样的输入:

t       m   f           yf
正则表达式之后的输出:

t   m   f   yf
代码正则表达式:

    public string Format(string s)
    {
      string strRegex = @"[\t]+";
      Regex myRegex = new Regex(strRegex, RegexOptions.None);
      string strReplace = @"[\t]";
      return myRegex.Replace(s, strReplace);
    }
接下来,我和你一样,用

private void ConvertToCSV(ListBox listBox)
        {
            string txtpath = DIRPATH + listBoxFiles.SelectedItem + ".txt";
            string csvpath = DIRPATH + listBoxFiles.SelectedItem + ".csv";

            // Read through rows in the text file and replace tabs with 
            // commas

            var lines = File.ReadAllLines(txtpath);
            var csv = lines.Select(row => string.Join(",", Format(row).Split('\t')));

            // Replace the .txt extention with .csv

            File.WriteAllLines(txtpath, csv);
            System.IO.File.Move(txtpath, csvpath);

            }

有一个
Split()
重载使用了
stringsplit选项。删除mptyentries
…但是多个制表符不是意味着多个列吗…所以多个逗号应该是正确的?多个制表符意味着空单元格。您不想删除它们。为什么要用逗号替换制表符呢?任何可以读取CSV的应用程序都可以将选项卡作为字段分隔符处理。事实上,这避免了与数字字段中的千/十进制分隔符混淆。只需指定
\t
作为用于处理文件的任何库或代码中的字段分隔符
ReadLines
而不是
ReadAllLines
是更好的选择(我们不需要数组;
IEnumerable
就足够了)我尝试了您最初的解决方案,但遇到了/t问题,我的逗号应该在哪里,所以我只是对格式方法做了一个简单的更改。我想这可能会使我的替换行除了行读取功能之外毫无用处。谢谢