C#在多行字符串中插入字符串

时间:2011-08-04 07:47:38

标签: c# multilinestring

我有一个多行字符串(来自使用ReadAllText的txt文件)。 字符串看起来像这样:

R;0035709310000026542510X0715;;;  
R;0035709310000045094410P1245;;;  
R;0035709310000026502910Z1153;;;

我想加入一个“;”在第22位的每一行,所以它看起来像这样:

R;00357093100000265425;10X0715;;;  
R;00357093100000450944;10P1245;;;  
R;00357093100000265029;10Z1153;;;

多行字符串始终包含samme数据量但不总是3行 - 有时更多行。

我该怎么做?请出示一些代码。

非常感谢:-) 最好的祝福 弯曲

6 个答案:

答案 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个字符串参数:

  • 第一个是输入
  • 第二个是模式
  • 3rd是替换字符串

在模式中:

  • ()是一个捕获组:您可以在替换字符串中使用\ n来调用它,n是模式中捕获组的从1开始的索引。在这种情况下,\ 1是任何匹配的“(^。{22})”
  • “^”是一行的开头(因为我们设置了多行选项,否则它将是输入字符串的开头)
  • “”。匹配任何角色
  • {22}表示您需要先前模式(在本例中为“。”,任何字符)22次

那意味着: “在任何包含22个字符或更多字符的行中,将22个第一个字符替换为相同的22个字符加上”;“

答案 5 :(得分:0)

根据建议,您可以使用Insert方法来实现目标。

如果您的文件包含很多行,并且您需要一次处理1行,您也可以考虑从TextReader逐行阅读。