Ищу замену для Line Input

Владимир Саныч
Дата: 08.09.2005 15:36:09
Всех приветствую и всем заранее спасибо.

Пытался читать файл при помощи Line Input, да не получилось, потому что у файла в концах строк стоит не chr(13) & chr(10), а только chr(10). Какой есть самый простой способ это обойти?
глупыйглупый
Дата: 08.09.2005 15:39:02
вычитать файл целиком за раз и преобразовать строку к массиву через сплит?
глупыйглупый
Дата: 08.09.2005 15:41:06
вабще-то это бникс разделитель строк.
как он попадает на вин машину зависит от набора обстоятельств.

наверняка какойнибудь unixToDos есть, который приводит к "правильным разделителям строк"
бникс
Дата: 08.09.2005 15:41:41
бникс=юникс
Владимир Саныч
Дата: 08.09.2005 15:44:30
глупыйглупый
вычитать файл целиком за раз и преобразовать строку к массиву через сплит?

Размер файла 30 мегов.

глупыйглупый
как он попадает на вин машину зависит от набора обстоятельств.

Это файл csv из Ёкселя. Причем файлы даны, пересохранить их нельзя.
Allll
Дата: 08.09.2005 15:52:37
Дополнение к предложенному варианту:
- узнать размер файла Lof. Если больше, чем 32767 (максимальное количество символов в стринге), то считывать (strText=Input 32767,#1) нужно за несколько раз в цикле.
- выделять куски по chr$(10). Последний кусок оставить и к нему прикрепить следующий стринг, прочитанный из файла. При этом нужно считывать количество символов 32767 - Len(последний кусок)
LeonM
Дата: 08.09.2005 15:53:16
Ни разу не пробовал сам, но в качестве эксперимента: открыть файл в двоичном режиме и попробовать line input. Один chr(10) - верный признак, что файл записывался в двоичном режиме. Если строки одинаковой длины, то определить переменную такого же размера и читать в нее с помощью get.
глупыйглупый
Дата: 08.09.2005 16:01:22
30 мегов - это ярунда а не размер. это же не не больше двух гигов?
и тем более четырех.

по содержанию.
тут админ мне сказал, что в никсах есть стандартные утили unix2Dos и Dos2Unix, которые делают то, что надо.

вариант2 -
вытягивать файл по ftp в ANSI режиме, тогда все преобразования должны пройти сами при загрузке.

---------------------------
если читать целиком - не нравится сплит, пробуй инстр. а 30 мегов за раз
вычитать - дело вполне понятное

не нравится 30 мегов - читай частями, кратными размеру сектора но не меньше 8 кб. Я бы по 64 пробовал.

----------------
а база - SQL Server или Jet-mdb?
Allll
Дата: 08.09.2005 16:04:51
Кстати, был уверен, что максимальная длина стринга 32767, но попробовал и нормально записалось 130 миллионов символов:
Sub Test()
Dim strText As String
    strText = String(130000000, "1")
    MsgBox Len(strText)
End Sub
Если записать 135 миллионов, то пишет, что недостаточно памяти для строки. Видимо сколько Windows даст памяти, столько и можно записать символов в строку.

Т.е. эти 30 мегабайтов можно записать в один стринг с помощью Input.
глупыйглупый
Дата: 08.09.2005 16:06:44
про ксв - прозевал.
и в результате че-то ничего не понял.
там что - разное количество полей в строках, что-ли?
почему стандартный импорт по спецификации в таблицу не устраивает?
(он с ентим добром самостоятельно разбирается)