Member 12939116 Ответов: 2

Как редактировать пустые строки в текстовом файле VB


привет всем, я пытаюсь заполнить пустые строки в текстовом файле определенным текстом, как вы увидите, но редактируется только строка 69, вот мой код.

Что я уже пробовал:

Public Sub labelstrings()
        Dim lines As String() = File.ReadAllLines(del.filename)
        Dim v As Integer
        For v = 0 To 69 
            ReDim lines(v)
            If String.IsNullOrWhiteSpace(lines(v)) Then

                lines(v) = "ali"
                File.WriteAllLines(del.filename, lines)
            End If
        Next
        

    End Sub

[no name]

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

2 Ответов

Рейтинг:
2

Patrice T

У вашего кода есть много проблем, одна из них заключается в том, что вы пишете результирующий файл только тогда, когда есть пустая строка.

Используйте отладчик, чтобы увидеть, что делает ваш код. Он позволяет выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

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


Рейтинг:
0

Dave Kreskowiak

С вашим кодом много проблем.

Во-первых, линия ReDim lines(v) это совершенно не нужно. Как вы думаете, что делает эта линия? Возможно, вы захотите ознакомиться с документацией по ReDim выяснить.

Затем вы записываете весь файл обратно на диск каждый раз, когда находите пустую строку. Это очень ненужно и вредит производительности ваших кодов. Если бы у вас был файл со 100 000 строками и 1% из них были пустыми строками, вы бы записали файл обратно на диск 1000 раз. Почему? Вам нужно сделать это только один раз.

Сканируйте все ваши строки и делайте замены, а затем вы записываете файл обратно после завершения цикла. Еще лучше, если вы не заменили ни одной строки, зачем вообще записывать файл обратно?

А что еще? Название метода, который вы используете, не имеет никакого смысла. "LabelStrings"? Что это значит?

Кроме того, вы используете "глобальные" переменные вместо передачи имени файла в метод. Это делает ваш код более сложным для отладки и менее универсальным.

Ваш код жестко закодирован, чтобы прочитать всего 70 строк файла. А что, если линий будет меньше? Ваш код создает исключение. А что, если линий больше? Вы уверены, что не хотите, чтобы это обрабатывало динамическое количество строк?

Наконец, ваш код выдаст исключение, если он по какой-либо причине не сможет открыть и прочитать файл. Что произойдет, если файл не существует? Вы уверены, что не хотите справиться с этой ситуацией?

Public Sub labelstrings()
    Dim lines As String() = File.ReadAllLines(del.filename)
    Dim v As Integer

    For v = 0 To 69
        If String.IsNullOrWhiteSpace(lines(v)) Then
            lines(v) = "ali"
        End If
    Next

    File.WriteAllLines(del.filename, lines)
End Sub