2017-01-24 1 views
-2

У меня есть текстовый файл со следующими записями:Как я добавить текст построчно в существующий текстовый файл в C#

676874463 
676844967 
676796379 
676789975 
676760851 
676736748 

Я хочу, чтобы прочитать каждую запись и добавить в него данные следующим образом:

237676874463# 
237676844967# 
237676796379# 
237676789975# 
237676760851# 
237676736748# 

Т.е., добавьте 237 перед каждым входом и # в конце каждой записи.

вот мой код до сих пор:

public class Program 
     { 
      public string fileDoc = @"c:\Users\UNICS\Desktop\Bulk SMS\BafutFormattedWithoutDuplicates.txt";  
    StreamReader reader = new StreamReader(fileDoc); 

    while ((inputline = reader.ReadLine()) != null) 
       { 
        // remove duplicates here 
       } 

Может кто-нибудь наставит меня на способ сделать это?

+1

File.ReadAllLines(), петли и обновление, File.WriteAllLines() –

+2

Oneliner - 'File.WriteAllLines (путь, File.ReadAllLines (путь) .Select (л => $" 237 {л} # «));' – stuartd

+0

Примечание: для будущих вопросов, пожалуйста, продемонстрируйте, что вы пробовали, и не добавляйте текст, не имеющий прямого отношения к проблеме (например, «Все ответы приветствуются») и благодарственные заметки (например, «Приветствия»). Я лично не понимаю, почему вы * приветствуете все ответы * (неправильное/низкое качество, как только это сообщение уже собрано) вместо того, чтобы просить правильные/понятные ответы, если вы действительно хотите добавить такой текст. –

ответ

-1

Попробуйте это:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace ConsoleApplication43 
{ 
    class Program 
    { 
     const string IN_FILENAME = @"c:\temp\in.txt"; 
     const string OUT_FILENAME = @"c:\temp\out.txt"; 
     static void Main(string[] args) 
     { 
      StreamReader reader = new StreamReader(IN_FILENAME); 
      StreamWriter writer = new StreamWriter(OUT_FILENAME); 

      string inputline = ""; 
      while ((inputline = reader.ReadLine()) != null) 
      { 
       writer.WriteLine("237" + inputline + "#"); 
      } 

      writer.Flush(); 
      writer.Close(); 
      reader.Close(); 

     } 
    } 
} 
+0

Почему? Никакое объяснение, образец, который не работает в том же файле, что подразумевается под OP, бессмысленный вызов '.Flush()', используя '.Close()' вместо 'use' - какова рекомендация? –

+0

@Alexei, u означает, что мне нужен класс, который реализует IDisposable§ – user3015410

+0

@ user3015410 Я не знаю, что вам нужно. Мой комментарий был о примере в этом ответе - хорошая практика использования 'StreamReader' (и большинства классов System.IO) заключается в использовании (var reader = new StreamReader (IN_FILENAME)) {....}', а не ' .Close() ', который может быть пропущен из-за исключений. –

0

I'm с помощью StringBuilder и создать новый файл, в котором я храню результат, который вы хотите видеть. Я делаю это из BIDS (Bussiness Intelligence Development Studio), но это C#, поэтому он будет работать для вас.

using System; 

using System.IO; 
using System.Text; 

namespace ST_d1578e806c274e419063843a63f76441.csproj 
{ 
     public void Main() 
     { 
      String SomeFileName = @"C:\Users\unmsm_02\Desktop\ExampleTextFile.txt"; // Main FILE 
      String AuxFileName = @"C:\Users\unmsm_02\Desktop\ResultTextFile.txt"; // File wher eis the result string 

      using (FileStream fs = File.Open(SomeFileName, FileMode.Open)) 
      using (BufferedStream bs = new BufferedStream(fs)) 
      using (StreamReader sr = new StreamReader(bs)) 
      { 
       String line; 
       while (sr.EndOfStream == false) 
       { 
        line = sr.ReadLine(); 
        if (line.Length > 1) 
        { 

         StringBuilder sb = new StringBuilder(); 
         sb.Insert(0, "237"); 
         sb.Insert(3, line); 
         sb.Insert(line.Length + 3, "#"); 

         String line_Aux = sb.ToString(); 

         File.AppendAllText(AuxFileName, line_Aux + "\r\n"); 
        } 
       } 

       Dts.TaskResult = (int)ScriptResults.Success; //FORGET ABOUT THIS, its from the BIDS enviroment, just use the above, and it should work 
      } 
     } 
    } 
} 

StringBuilder его довольно полезным здесь, вы можете просто создать строку с помощью метода Insert с первым параметром является положение, в котором вы хотите вставить, а второй параметр строка, которую вы хотите вставить. После того, как вы закончите использовать insert(), вы конвертируете его в строку и в моем случае сохраните на line_Aux, который является линией, которая будет сохранена в новом файле.

Надеюсь, это поможет!

0

Я подумал о том, чтобы прочитать его в массиве и занять его для редактирования.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace EditText 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //Import text from file to an array. 
      string[] myArray = File.ReadAllLines("text1.txt"); 

      //This is what will be written into the text file. 
      string myFileText = ""; 

      //Loop through the array 
      for(int i = 0; i<myArray.Length; i++) 
      { 
       //Du the change you want here 
       string myString = "237" + myArray[i] + "#"; 

       //Add the result to the string you will write to the file 
       myFileText += myString; 
       myFileText += Environment.NewLine; 
      } 

      //Write the text to the file. 
      File.WriteAllText("text1.txt", myFileText); 
      //Done 

     } 
    } 
}