Помогите прочитать разрывы строк в текстовом файле - PullRequest
0 голосов
/ 22 мая 2009

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

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

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

Ответы [ 3 ]

2 голосов
/ 22 мая 2009

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

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

0 голосов
/ 28 мая 2009

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

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

Например, если у вас есть текстовый файл, содержащий «ANSI» из русского языка, вы можете установить Stream.Charset = "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

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

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

0 голосов
/ 22 мая 2009

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

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

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

...