3

複数行の文字列があります (ReadAllText を使用した txt ファイルから)。文字列は次のようになります。

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

「;」を入れたい 22 番目の各行にあるので、次のようになります。

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

複数行の文字列には常に同じ量のデータが含まれますが、常に 3 行ではなく、場合によってはそれ以上の行が含まれます。

どうやってこれを作るのですか?いくつかのコードを示してください。

ありがとうございます :-) Bent よろしくお願いします

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

これを試して

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 に答える
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.???");

このアプローチは、すべてのデータを一度にメモリにロードすることを回避するため、大きなファイルに特に適していますが、非常に大きなファイルを除いて、または行が非常に (非常に) 長い場合はパフォーマンスが向上します。

于 2011-08-04T08:18:24.763 に答える
0

あなたは正規表現で行くことができます:

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

説明: 3 つの文字列引数があります:

  • 1つ目は入力です
  • 2枚目はパターン
  • 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 に答える