2016-07-31 4 views
0

У меня есть 2 файла, один index.html, который больше похож на шаблон и выводит индексный файл, который является новым файлом. первый индексный файл содержит ## 1, ## 2 .... ## 24 внутри него, и я хочу, чтобы те были заменены некоторыми ссылками, которые я предоставляю в текстовом файле.VB.NET Multiple Replace in Text File

Позвольте мне объяснить мой код. Сначала я создаю свой выходной файл. Я объявляю массив строк, содержащий ссылки, которые заменят ## 1 .... ## 24. i цикл 24 раза, чтобы заменить все ## ссылками, предоставленными из allLines. В конечном файле он заменяет только некоторые из ## и не все

Моя форма выглядит следующим образом https://s32.postimg.org/6h3ug8s7p/Untitled.png

Проблема в том, что оно не заменяет все ссылки, он заменяет только некоторые из них, и это действительно странно ,

IO.File.Create(TextBox3.Text).Dispose() 

    Dim allLines As String() = System.IO.File.ReadAllLines(TextBox1.Text) 
    For c As Integer = 1 To 24 Step 1 

     My.Computer.FileSystem.WriteAllText(TextBox3.Text, My.Computer.FileSystem.ReadAllText(TextBox2.Text).Replace("##" & c, allLines(c - 1)), True) 

    Next 
+0

Есть ли у него какие-либо точные вопросы о предметах, которые не были заменены? Это, например, всегда не заменяет первый файл/последний файл и т. Д.? Или это совершенно случайно? Также вы можете проверить использование точки останова, если массив содержит все элементы правильно? –

+0

Это не совсем случайный ... он заменяет первый, затем 10-й 11-й .... 20-й. я проведу массив далее –

+1

Вместо того, чтобы постоянно читать и записывать файл в цикле, сначала нужно прочитать весь текст в строку, выполнить все свои замены и затем записать его один раз. Вы сохраняете перезапись файла, отмеченного «TextBox3.Text» заменой * single * из файла TextBox2. Я предполагаю, что вы видите только «окончательную» замену. 'Dim sb как новый StringBuilder (File.ReadAllText (TextBox3.Text))/Для i = от 1 до 24/sb.Replace (" ## "& c, allLines (c-1))/Next i' Затем, наконец,' File .WriteAllText (TextBox3.Text, sb.ToString()) ' – pinkfloydx33

ответ

0

Проблема заключается в том, что вы постоянно чтение/запись файла, используя же источник файл (TextBox2.Text). File.WriteAllText перезаписывает любой файл, который уже существует, и вы не перечитываете содержимое этого файла перед выполнением замены.

Что нужно сделать, так это прочитать текст один раз, выполнить все замены и затем написать текст один раз. Что-то вдоль этих линий:

Dim sb as new StringBuilder(File.ReadAllText(TextBox2.Text)) 
Dim allLines = File.ReadAllLines(TextBox1.Text) 
For c as Integer = 1 to 24 
    sb.Replace("##"&c, allLines(c-1)) 
Next x 

File.WriteAllText(TextBox3.Text, sb.ToString()) 

Обратите внимание, что вам действительно нужно некоторые обработки ошибок там, а также (чтобы убедиться, что есть данные в этих текстовых полях - которые могли бы также использовать лучшие имена)

Вы также не нужно звонить до File.Create(). File.WriteAllText будет create the file if it does not exist.