Справка По чтению Разрывов строк В текстовом файле
-
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 содержит доступные значения.