2

特定の行に移動する方法は知っていますが、文字列内の特定の行を更新する方法がわかりません。置換機能を試しましたが、重複も上書きされます。何か案は?

  static string GetLine(string text, int lineNo)
  {
     string[] lines = text.Replace("\r", "").Split('\n');
     return lines.Length >= lineNo ? lines[lineNo - 1] : null;
  }

 static void Main(string[] args)
 {
   string file = "D:\\random.text";
   string contents = "";
   string text="random";
   contents = File.ReadAllText(file);
   finale=GetLine(contents,lines);
   // Console.ReadLine();
    if(finale.Contains(text))
    {
        finale.Replace(text,"Random");
        System.Console.WriteLine(finale);
        Console.ReadLine();
    }
 }
4

3 に答える 3

1

文字列は不変型です。つまり、既存の文字列を変更することはできません。string.Replace置換された文字列を返すので、それを元に戻す必要があります。

if(finale.Contains(text))
{
    finale = finale.Replace(text,"Random"); //<- note here
    System.Console.WriteLine(finale);
    Console.ReadLine();
}

そこから、フィリップが指摘したように、文字列配列から文字列を再構築する必要があります。完全な例 (ただし未テスト):

  static string[] GetLines(string text)
  {
     return text.Replace("\r", "").Split('\n');
  }

  static string GetLine(string[] lines, int lineNo)
  {
      return lines.Length >= lineNo ? lines[lineNo - 1] : null;
  }

 static void Main(string[] args)
 {
   string file = "D:\\random.text";
   string contents = "";
   string text="random";
   contents = File.ReadAllText(file);
   var lines = GetLines(contents);
   finale = GetLine(lines, lineNo);
   //Console.ReadLine();
   if (finale == null)
       return;
    if(finale.Contains(text))
    {
        finale = finale.Replace(text, "Random");
        System.Console.WriteLine(finale);
        Console.ReadLine();
    }
    lines[lineNo] = finale;
    contents = string.Join('\n', lines);
 }

そして何よりも、分割機能はまったく必要ありません。.NET にはその機能があり、ボーナスである遅延(オンデマンド) を行います。

.NET 4.0 以降を使用している場合は、 File.ReadLinesを参照してください。

于 2013-06-16T07:46:49.853 に答える
0

最も迅速な解決策は、Split によって返された配列を保持し、String.Joinを使用して最初に作成したものを再構築することです。

于 2013-06-16T07:45:09.260 に答える