3

我有一个多行字符串(来自使用 ReadAllText 的 txt 文件)。字符串如下所示:

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

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

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

多行字符串始终包含相同数量的数据,但并不总是 3 行 - 有时更多行。

我怎么做这个?请显示一些代码。

非常感谢 :-) 最好的问候弯曲

4

6 回答 6

5

尝试这个 ...

using System.IO;
using System.Linq;

var lines = File.ReadAllLines("data.txt");
var results = lines.Select(x => x.Insert(22, ";"));
于 2011-08-04T08:03:19.583 回答
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()

于 2011-08-04T07:52:04.303 回答
1

我认为最好逐行读取源文件并随时修改该行。

您可以在 a 中构建新文件,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.???");

这种方法变得特别适用于大文件,因为它避免了一次将所有数据加载到内存中,但是除了非常大的文件之外的所有文件,或者我猜,如果行非常(非常)长,性能将会很好。

于 2011-08-04T08:18:24.763 回答
1

尝试这个

string s ="R;0035709310000026542510X0715;;;";
s = s.Insert(22,";");
Console.Write(s);

或使用正则表达式

    string s =@"R;0035709310000026542510X0715;;;
R;0035709310000045094410P1245;;;
R;0035709310000026502910Z1153;;;";
    string resultString = Regex.Replace(s, "^.{22}", "$0;", RegexOptions.IgnoreCase | RegexOptions.Multiline);
    Console.Write(resultString);
于 2011-08-04T07:53:33.010 回答
0

您可以使用正则表达式:

myString = Regex.Replace(myString, @"(^.{22})", @"\1;", RegexOptions.Multiline);

说明:您有 3 个字符串参数:

  • 第一个是输入
  • 第二个是图案
  • 第三个是替换字符串

在模式中:

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

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

于 2011-08-04T08:05:57.610 回答
0

按照建议,您可以使用Insert方法来实现您的目标。

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

于 2011-08-04T08:10:31.487 回答