ASP Readline нестандартные окончания строк - PullRequest
3 голосов
/ 08 декабря 2009

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

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

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

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

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

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

1 Ответ

4 голосов
/ 08 декабря 2009

Нет способа изменить поведение 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. Я использую слово «Unicode» в том смысле, что документация действительно означает UTF-16. Одним из преимуществ здесь является то, что ADODB Stream может обрабатывать UTF-8 в отличие от библиотеки Scripting.

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

...