我有一个文本文件,其中的文字行如此布局
12345MLOL68
12345MLOL68
12345MLOL68
我想读取文件并在第5点,第6点和第9点添加逗号并将其写入不同的文本文件,结果将是。
12345,M,LOL,68
12345,M,LOL,68
12345,M,LOL,68
这是我到目前为止所拥有的
public static void ToCSV(string fileWRITE, string fileREAD)
{
int count = 0;
string x = "";
StreamWriter commas = new StreamWriter(fileWRITE);
string FileText = new System.IO.StreamReader(fileREAD).ReadToEnd();
var dataList = new List<string>();
IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);
foreach (string y in splitString)
{
dataList.Add(y);
}
foreach (string y in dataList)
{
x = (x + y + ",");
count++;
if (count == 3)
{
x = (x + "NULL,NULL,NULL,NULL");
commas.WriteLine(x);
x = "";
count = 0;
)
}
commas.Close();
}
我遇到的问题是试图找出如何分割我在几个点读到的原始字符串行。这条线
IEnumerable<string> splitString = Regex.Split(FileText, "(.{1}.{5})").Where(s => s != String.Empty);
不按我想要的方式工作。它只是将1和5加起来并在第6个字符处分割所有字符串。
有人可以帮助我在特定点分割每个字符串吗?
答案 0 :(得分:1)
只需按照这样的降序插入正确的位置。
string str = "12345MLOL68";
int[] indices = {5, 6, 9};
indices = indices.OrderByDescending(x => x).ToArray();
foreach (var index in indices)
{
str = str.Insert(index, ",");
}
我们按降序执行此操作,因为如果我们采用其他方式索引会发生变化,则很难跟踪它。
以下是Demo
答案 1 :(得分:1)
为什么不使用子字符串,例如
editedstring=input.substring(0,5)+","+input.substring(5,1)+","+input.substring(6,3)+","+input.substring(9);
这应该符合您的需要。
答案 2 :(得分:1)
更简单的代码:
public static void ToCSV(string fileWRITE, string fileREAD)
{
string[] lines = File.ReadAllLines(fileREAD);
string[] splitLines = lines.Select(s => Regex.Replace(s, "(.{5})(.)(.{3})(.*)", "$1,$2,$3,$4")).ToArray();
File.WriteAllLines(fileWRITE, splitLines);
}