Справка По чтению Разрывов строк В текстовом файле

StackOverflow https://stackoverflow.com/questions/898912

  •  23-08-2019
  •  | 
  •  

Вопрос

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

Кто-нибудь знает, почему это происходит и как я могу избежать необходимости вручную открывать файл и сохранять его с помощью wordpad?Приложение написано на vb 6 (Ого!).

Спасибо за любую помощь

Это было полезно?

Решение

Это проблема с окончанием строки.Ваш код (и блокнот) хотят видеть пары Возврат каретки (CR) / Перевод строки (LF), и это, вероятно, файл только CR (Macintosh) или только LF (Unix).Wordpad более снисходителен, и при сохранении, по-видимому (не тестировал), сохраняет пары CR / LF для вас.

Вы можете изменить свой код в приложении, чтобы искать любое из окончаний и легко обрабатывать их:просто перестаньте искать vbCrLf как пару и ищите либо как конец строки.Моя собственная стратегия заключается в сканировании CR или LF и использовании всех символов CR / LF, которые следовали:это также удаляет пустые строки.

Другие советы

Файл, вероятно, содержит только символ возврата каретки (CR) или перевода строки (LF) в конце каждой строки.

В Windows вам нужны как CR, так и LF символы в конце каждой строки.Это можно легко сделать в VB6, используя константу vbCrLf.

С другой стороны, если вы сами читаете файл, вы можете определить, какой из них отсутствует, и вручную добавить его по мере чтения файла (то есть, используя функцию replace для преобразования CR в CRLF или LF в CRLF).

Если эти файлы не очень большие и производительность не критична, чтение их по строкам может быть легко выполнено с помощью объекта ADODB.Stream.

Это не только обработает несколько разделителей строк (Stream.LineSeparator = adCR, adCRLF или adLF) его также можно использовать для обработки файлов, содержащих Unicode (UTF-16), UTF-8, системную кодовую страницу ANSI и альтернативные кодировки "ANSI" для других локалей.

Например, если у вас есть текстовый файл, содержащий "ANSI" из русскоязычной локали, вы можете установить Stream.Кодировка = "koi8-r" и считайте данные с правильным переводом в VB6 Unicode (UTF-16):

Dim Stm As ADODB.Stream
Dim Line As String
Dim Counter As Long
Set Stm = New ADODB.Stream
With Stm
    .Open
    .LoadFromFile "russian.txt"
    .Type = adTypeText
    .Charset = "koi8-r"
    .LineSeparator = adLF
    Do Until .EOS
        Line = .ReadText(adReadLine) 'Text is in Unicode now.
        Counter = Counter + 1
    Loop
    .Close
End With

Кодировка по умолчанию имеет значение "unicode" (UTF-16), но для чтения или записи потока в ANSI с кодовой страницей по умолчанию вы можете установить вместо нее значение "ascii".

HKCR\MIME\Database\Charset содержит доступные значения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top