Ищу замену для 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
про ксв - прозевал.
и в результате че-то ничего не понял.
там что - разное количество полей в строках, что-ли?
почему стандартный импорт по спецификации в таблицу не устраивает?
(он с ентим добром самостоятельно разбирается)