Помогите с разбором строк файла и заменой подстроки - PullRequest
2 голосов
/ 19 июля 2011

Мне нужно заменить определенные символы в каждой строке файла.Файл не разделен, но каждая строка имеет фиксированный формат.Например, мне нужно заменить 5 вопросительных знаков на «х».5 вопросительных знаков, которые необходимо заменить в каждой строке, находятся в позиции 10. Так, например:

Входной файл:

abdfg trr?????456
g?????dhs?????diu
eerrttyycdhjjhddd

Выходной файл должен быть:

abdfg trrxxxxx456
g?????dhsxxxxxdiu
eerrttyycdhjjhddd

Выходной файл будет сохранен как отдельный файл в определенном месте

Какой лучший способ сделать это в VB.NET (я немного новичок в VB, поэтому любой пример кода будетПомогите)?

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Одним из возможных решений является анализ каждой строки в файле с помощью StreamReader (с помощью метода ReadLine () ).Когда вы читаете в каждой строке, вы можете использовать StreamWriter для записи исходной строки (с помощью метода WriteLine (String) ) с одной настройкой.Если строка соответствует вашим требованиям к замене, вы будете использовать метод String.Replace (String, String) для замены старой строки на строку замены.

Вот решение (скомпилированои проверено с вашими данными образца выше).Вы все еще хотели бы добавить некоторую обработку исключений (по крайней мере, убедитесь, что файл существует первым):

Public Shared Sub ReplacementExample(string originalFile, string newFile)

    ' Read contents of "oringalFile"
    ' Replace 5 ? characters with 5 x characters.
    ' Write output to the "newFile"
    ' Note: Only do so if the ? characters begin at position 10


    Const replaceMe As String = "?????"
    Const replacement As String = "xxxxx"

    Dim line As String = Nothing

    Using r As New StreamReader(originalFile)
        Using w As New StreamWriter(newFile)

            line = r.ReadLine()

            While Not line Is Nothing
                w.WriteLine(line.Substring(0, 9) + _
                            line.Substring(9).Replace(replaceMe, replacement))

                line = r.ReadLine()
            End While

        End Using
    End Using
End Sub
2 голосов
/ 19 июля 2011

Судя по предоставленной позиции исходного кода 9.

C # код:

var res = s.Substring(0, 9) + s.Substring(9).Replace("?????", "xxxxx");

VB.NET:

Dim res As String = (s.Substring(0, 9) & s.Substring(9).Replace("?????", "xxxxx"))

Пример VB.NET:

Using sr As StreamReader = New StreamReader("a.txt")
        Using sw As StreamWriter = New StreamWriter("b.txt")
            Dim line As String = Nothing
            Do While (Not line = sr.ReadLine Is Nothing)
                Dim res As String = (line.Substring(0, 9) & line.Substring(9).Replace("?????", "xxxxx"))
                sw.WriteLine(res)
            Loop
        End Using
    End Using

Пример C #:

using (var sr = new StreamReader("a.txt"))
{
    using (var sw = new StreamWriter("b.txt"))
    {
        string line = null;
        while ((line = sr.ReadLine()) != null)
        {
            var res = line.Substring(0, 9) + line.Substring(9).Replace("?????", "xxxxx");
            sw.WriteLine(res);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...