我有一个多行字符串(来自使用ReadAllText的txt文件)。 字符串看起来像这样:
R;0035709310000026542510X0715;;;
R;0035709310000045094410P1245;;;
R;0035709310000026502910Z1153;;;
我想加入一个“;”在第22位的每一行,所以它看起来像这样:
R;00357093100000265425;10X0715;;;
R;00357093100000450944;10P1245;;;
R;00357093100000265029;10Z1153;;;
多行字符串始终包含samme数据量但不总是3行 - 有时更多行。
我该怎么做?请出示一些代码。
非常感谢:-) 最好的祝福 弯曲
答案 0 :(得分:5)
试试这个......
using System.IO;
using System.Linq;
var lines = File.ReadAllLines("data.txt");
var results = lines.Select(x => x.Insert(22, ";"));
答案 1 :(得分:4)
步骤1,不要使用ReadAllText()。请改用ReadAllLines()。
string[] myLinesArray = File.ReadAllLines(...);
步骤2,用更改后的版本替换所有行(字符串)。
for(int i = 0; i < myLinesArray.Length; i++)
myLinesArray[i] = myLinesArray[i].Insert(22, ";");
步骤3,使用WriteAllLines()
答案 2 :(得分:1)
试试这个
string s ="R;0035709310000026542510X0715;;;";
s = s.Insert(22,";");
Console.Write(s);
或使用Regex
string s =@"R;0035709310000026542510X0715;;;
R;0035709310000045094410P1245;;;
R;0035709310000026502910Z1153;;;";
string resultString = Regex.Replace(s, "^.{22}", "$0;", RegexOptions.IgnoreCase | RegexOptions.Multiline);
Console.Write(resultString);
答案 3 :(得分:1)
我认为最好逐行阅读源文件并随时修改该行。
您可以在StringBuilder
中构建新文件,如果很大,则可以
将其写入新文件,用于替换最后的源。
像这样,
using System.IO;
string tempFileName = Path.GetTempFileName();
using (StreamWriter target = File.CreateText(tempFileName))
{
using(StreamReader source = file.OpenText("YourSourceFile.???"))
{
while (source.Peek() >= 0)
{
target.WriteLine(source.ReadLine().Insert(22, ";"));
}
}
}
File.Delete("YourSourceFile.???");
File.Move(tempFileName, "YourSourceFile.???");
这种方法特别适用于大型文件,因为它可以避免一次性将所有数据加载到内存中,但是对于除了非常大的文件之外的所有文件都会有好的表现,或者我猜测,如果这些行非常(非常)长。
答案 4 :(得分:0)
你可以选择Regex:
myString = Regex.Replace(myString, @"(^.{22})", @"\1;", RegexOptions.Multiline);
说明: 你有3个字符串参数:
在模式中:
那意味着: “在任何包含22个字符或更多字符的行中,将22个第一个字符替换为相同的22个字符加上”;“
答案 5 :(得分:0)
根据建议,您可以使用Insert方法来实现目标。
如果您的文件包含很多行,并且您需要一次处理1行,您也可以考虑从TextReader逐行阅读。