Нестандартные окончания строк ASP Readline

Я использую функцию ASP Classic ReadLine() объекта файловой системы.
Все работало отлично, пока кто-то не сделал свой файл импорта на Mac в TextEdit.

Окончания строк не совпадают, и ReadLine() читает весь файл, а не только одну строку за раз.

Есть ли стандартный способ справиться с этим? Какая-то директива страницы или настройка объекта файловой системы?

Я думаю, что я мог бы прочитать весь файл и разделить на vbLF, затем для каждого элемента заменить vbCR на "", затем обработать строки по одной, но это кажется немного неуклюжим.

Я искал решение этой проблемы повсюду, но все решения совпадают со строками «не сохранять файл с окончаниями строк Mac [sic]».

У кого-нибудь есть лучший способ справиться с этой проблемой?


person Matt Dawdy    schedule 07.12.2009    source источник


Ответы (1)


Невозможно изменить поведение ReadLine, он будет распознавать только CRLF как признак конца строки. Следовательно, единственным простым решением является то, которое вы уже описали.

Изменить

На самом деле есть еще одна библиотека, которая должна быть доступна из коробки на сервере ASP, и она может предложить некоторую помощь. Это библиотека ADODB.

Объект ADODB.Stream имеет свойство LineSeparator, которому можно присвоить значение 10 или 13, чтобы переопределить CRLF по умолчанию, который он обычно использует. Документация неоднородна, потому что не описывает, как это можно использовать с ReadText. Вы можете заставить метод ReadText возвращать следующую строку из потока, передав -2 в качестве его параметра.

Взгляните на этот пример: -

Dim sLine
Dim oStreamIn : Set oStreamIn = CreateObject("ADODB.Stream")

oStreamIn.Type = 2 '' # Text
oStreamIn.Open 
oStreamIn.CharSet = "Windows-1252"
oStreamIn.LoadFromFile "C:\temp\test.txt"
oStreamIn.LineSeparator = 10 '' # Linefeed

Do Until oStreamIn.EOS
  sLine = oStreamIn.ReadText(-2)
  '' # Do stuff with sLine
Loop

oStreamIn.Close

Обратите внимание, что по умолчанию CharSet является Unicode, поэтому вам нужно будет назначить правильный CharSet, используемый файлом, если это не Unicode. Я использую слово «Юникод» в том смысле, в каком документация означает, что на самом деле означает UTF-16. Одним из преимуществ здесь является то, что ADODB Stream может обрабатывать UTF-8, в отличие от библиотеки Scripting.

Кстати, я думал, что MAC используют CR для окончания строки? Это формат файла Unix, в котором используются LF, не так ли?

person AnthonyWJones    schedule 08.12.2009
comment
Вы, вероятно, абсолютно правы насчет CR на Mac и LF на Unix. Честно говоря, я отлаживал эту штуку через 2 сеанса удаленного рабочего стола, и буфер обмена не копировался. Я просто знал, что есть различия, и мне повезло, что я спросил в начале сеанса отладки, какая машина создала файл. Энтони, я просто хотел еще раз поблагодарить вас за время и подумал, что вы вложили в свой ответ. Я очень ценю это. - person Matt Dawdy; 10.12.2009
comment
Mac OS X — это Unix. Это была классическая Mac OS, которая использовала CR (хотя некоторые приложения все еще используют, я думаю). - person Ansgar Wiechers; 19.06.2013