Страница: 1 |
Страница: 1 |
Вопрос: Открытие файла
Добавлено: 30.08.04 09:49
Автор вопроса: Tigre
При открытии файла произвольного доступа надо указать длинну записи. А если она неизвесна? При открытии для записи можно высчитать длинну записываемой переменной с помощью Len. А что делать когда файл открывается для чтения?
Ответы
Всего ответов: 12
Номер ответа: 1
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #1
Добавлено: 30.08.04 10:15
Если неизвестно, то её нужно указывать при чтении непосредственно.
Длина записи определяется длиной переменной. Не важно какого типа. Это может быть стандартный или пользовательский тип.
Если ты читаешь в строку, то длина записи определяется длиной строки.
Например:
 im StrToRead As String
StrToRead = SPACE$(256)
В этом случае длина записи будет 256 байт.
Ну второй вопрос - это к штатным телепатам
Что то типа: "Я нашёл паспорт. Как определить имя владельца не открывая его?". Читать прийдётся по любому. Именно по этому диск и называется внешней памятью.
Номер ответа: 2
Автор ответа:
Tigre
Вопросов: 34
Ответов: 63
Профиль | | #2
Добавлено: 30.08.04 10:31
Про это я и говорю. Но если оператор открытия ставится перед оператором чтения. Как я укажу длинну записи при открытии если я запись ещо не считал.
Open "Records.txt" For Random As #1 Len = ???
Get #1, 1, text1
Close #1
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 30.08.04 11:08
Tigre
Если не ты составлял файл и, соответственно, не знаешь что из себя представляет запись, то определить невозможно. Открывай как бинарный и анализируй. Например открыл как бинарный, считал его и увидел, что к примеру, через равное количество байт происходит повторение какого-либо символа, например, 0 или 2 байта 0D0A (CrLf)- можно предположить, что это строки. Длину уже можно вычислить. Это конечно простейший вариант, и маловероятно, что будет так, но по другому не получится.
Но это уже задача из области статистического анализа.
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 30.08.04 11:29
Open "Records.txt" For Binary As #1
text1=SPACE$(LOF(1))
Get #1, 1, text1
Close #1
Насколько я понял файл текстовый.
Тогда можно все строки загнать в массив:
 im FileArray As Variant
FileArray=SPLIT(text1, VbCrlf)
Номер ответа: 5
Автор ответа:
Tigre
Вопросов: 34
Ответов: 63
Профиль | | #5
Добавлено: 30.08.04 11:30
Спосибо. Но пожалуй лучше я воспользуюсь последовательным доступом. А как определить существует ли файл.
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 30.08.04 11:33
Определить можно так:
If Dir$("C\1.txt" <> "" Then файл существует
Номер ответа: 7
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #7
Добавлено: 30.08.04 11:38
If Len(Dir$("Path\FileName")>0 then msgbox"Present" Else Msgbox"Absent"
Номер ответа: 8
Автор ответа:
Tigre
Вопросов: 34
Ответов: 63
Профиль | | #8
Добавлено: 30.08.04 11:56
Всем спасибо
Номер ответа: 9
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #9
Добавлено: 30.08.04 12:06
Len=FileLen("C:\1.txt"
Если это еще нужно
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 01.09.04 08:36
Я уже не раз писал. Если файл твоего формата - пиши в его начала какую-нибудь структуру, т.н. Header. Занесешь туда длину записи, число записей, версию файла и т.п. Потом просто считывай его - и но проблем. Почти все форматы файлов имеют Header'ы.
Номер ответа: 11
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #11
Добавлено: 03.09.04 22:17
Если хочешь то могу тебе объяснить как делать заголовок.
Номер ответа: 12
Автор ответа:
Tigre
Вопросов: 34
Ответов: 63
Профиль | | #12
Добавлено: 03.09.04 23:06
В одной программе у меня работал такой вариант. В других програмах при таком коде возникает ошибка.
Open "ata.txt" For Random As #1 Len = Len(Переменная1)
Get #1, 1, Переменная1
Get #1, 2, Переменная1
Get #1, 3, Переменная1
Get #1, 4, Переменная1
Get #1, 5, Переменная1
Close #1