C# 如何使用C用一个逗号替换文件中的多个制表符#
我正在尝试从.txt文件创建CSV。该文件包含以制表符分隔的数据,但在某些情况下有多个制表符。我目前能够处理单个制表符到逗号的转换,但当我遇到多个制表符时,我会用多个逗号替换它,这会把电子表格弄得一团糟。这是我目前的代码:C# 如何使用C用一个逗号替换文件中的多个制表符#,c#,csv,C#,Csv,我正在尝试从.txt文件创建CSV。该文件包含以制表符分隔的数据,但在某些情况下有多个制表符。我目前能够处理单个制表符到逗号的转换,但当我遇到多个制表符时,我会用多个逗号替换它,这会把电子表格弄得一团糟。这是我目前的代码: private void ConvertToCSV(ListBox listBox) { string txtpath = DIRPATH + listBoxFiles.SelectedItem + ".txt";
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问题,我的逗号应该在哪里,所以我只是对格式方法做了一个简单的更改。我想这可能会使我的替换行除了行读取功能之外毫无用处。谢谢