Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Открытие файла Добавлено: 30.08.04 09:49  

Автор вопроса:  Tigre
При открытии файла произвольного доступа надо указать длинну записи. А если она неизвесна? При открытии для записи можно высчитать длинну записываемой переменной с помощью Len. А что делать когда файл открывается для чтения?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #1
Добавлено: 30.08.04 10:15
Если неизвестно, то её нужно указывать при чтении непосредственно.
 Длина записи определяется длиной переменной. Не важно какого типа. Это может быть стандартный или пользовательский тип.
 Если ты читаешь в строку, то длина записи определяется длиной строки.
 Например:
 ;Dim 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-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 30.08.04 11:29
Open "Records.txt" For Binary As #1
   text1=SPACE$(LOF(1))
   Get #1, 1, text1
Close #1

 Насколько я понял файл текстовый.
 Тогда можно все строки загнать в массив:
 ;Dim 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-сайт: basicproduction.nm.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #11
Добавлено: 03.09.04 22:17
Если хочешь то могу тебе объяснить как делать заголовок.

Ответить

Номер ответа: 12
Автор ответа:
 Tigre



Вопросов: 34
Ответов: 63
 Профиль | | #12 Добавлено: 03.09.04 23:06
В одной программе у меня работал такой вариант. В других програмах при таком коде возникает ошибка.

Open ";Data.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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам