![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
serezetdin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 16.2.2006 Репутация: нет Всего: нет |
Есть такой вопрос -
Мне нужно считывать из текстового файла фрагменты в программу. Фрагменты состоят из строк произвольной длины. Объем фрагмента - 9 строк. всего фрагментов - 40. Если открывать-закрывать файл индекс строки перемещается в самое начало файла, и происходит постоянно закачка первого фрагмента, а не строк с индексами 10-19 и т. д. Как мне лучше это организовать? Заранее спасибо |
|||
|
||||
amt |
|
||||||||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 249 Регистрация: 26.10.2004 Где: г. Волгоград Репутация: 3 Всего: 3 |
Если я не ошибаюсь, то чтение из текстового фойла можно производить только методом последовательного доступа. Т.е. нада просматривать последовательно строчку за строчкой.
Почитай здесь Последовательный доступ Последовательный доступ используется главным образом при работе с текстовыми файлами. Любая информация считывается или сохраняется в текстовом виде построчно. В тексте могут находиться символ перевода строки (vbCrLf или chr (13) & Chr (10)) или табулятор (vbTab или chr (9)). Эти символы используются для форматирования текста. Способ открытия файла с последовательным доступом (для чтения, записи или добавления) задается при вызове оператора Open: Open Имя_файла For [Input I Output I Append] As filehandle Таблица 4.6. Различные операционные возможности для последовательного доступа Ключевое слово Описание Input Открытие только для чтения иэ файла Output Открытие для записи в файл Append Открытие для добавления к файлу Если файл не существует и открывается для чтения (For input), то Visual Basic выдает сообщение об ошибке, а если для записи или добавления (Output или Append), то создается новый файл. Если файл с указанным именем существует, то в режиме Output его содержимое удаляется, а в режиме Append файл открывается для добавления:
В конце строки указывается номер канала, возвращаемый функцией FreeFile. В некоторых операционных системах, например в Windows 95/98, можно испольZ зовать длинные имена файлов. Чтение из файла Для считывания данных из файла, открытого для последовательного доступа, существует несколько возможностей. В общем случае это осуществляется с помощью оператора input, имеющего несколько разновидностей: • Line lnput# считывает одну строку; • I при t # считывает последовательность символов, обычно записанных с помощью оператора Write#; • input $ считывает определенное количество символов. Существует несколько вариантов чтения всей информации из файла. Перед чтением нужно открыть файл с помощью оператора Open.. . For:
1-ый вариант
2-ой вариант
Оба варианта приводят к одинаковому результату. В первом варианте оператор Input выполняется в цикле, пока не будет достигнут конец файла. Функция EOF (End Of File) возвращает значение True при достижении конца файла. При этом на каждом шаге цикла считывается отдельная строка и к ней добавляется символ конца строки, который отбрасывается оператором Line input. Во втором варианте весь файл считывается функцией lnput$. Функция LOF (Length Of File) позволяет определить длину файла в байтах. Заметим также, что независимо от вида оператора Input указывается не Имя файла, а только номер канала, т.е. дескриптор файла (intFH). Close Оператор Close предназначен для закрытия открытого файла или канала. Запись в файл В Visual Basic для записи информации в файл используются операторы print# и Write». Print» Оператор Print# функционирует почти так же, как его "коллега" для экрана, с той лишь разницей, что данные не выводятся на экран, а сохраняются в файле, открытом для записи или добавления (Open.. .For Output или Open.. .For Append). Vfintffilehandle, [(Spc(n) I Tab[(n)]l] [expression] [charpos] Синтаксис оператора на первый взгляд выглядит сложно: Print #intFH, Textl.Text Print #intFH, "Фрагмент I", " Фрагмент 2" Print #intFH, "Это составляет "; "единое целое" Для форматирования записываемой в файл информации следует поZразному разделять данные в операторе print. Если в операторе данные разделять запятыZ ми (,), то в файле они будут разделены символами табуляции: Print #intFH, "Фрагмент I", " Фрагмент 2" 'соответствует Print #intFH, "Фрагмент I"; Tab; "Фрагмент 2" Если же в операторе для разделения данных использовать точку с запятой (;), то данные в файл записываются без разделителей: Print #intFH, "Это составляет "; "единое целое" 'соответствует Print #intFH, "Это составляет единое целое" Write» Оператор Write# имеет такой же синтаксис, что и print#. Отличие состоит только в форматировании вывода. Если Print» сохраняет данные в виде обычного текста, то writer заключает текстовые строки в кавычки, а цифры выводятся без кавычек: Print #intFH, "Анна", "Киев", 17 ' в файле будет: Анна Киев 17 Write #intFH, "Анна", "Киев", 17 ' в файле будет: "Анна","Киев",17 Данные, сохраненные с помощью оператора write*, можно считать оператором Input». Узнать позицию считывания можно с помощью ф-ии
Если тебе надо в любой момент читать запись под любым номером то нужно организовывать запись файла с произвольным доступом. Произвольный доступ Доступ типа Random Access несколько утратил свое значение после появления в версии Visual Basic 3.0 средств доступа к базам данным. В отличие от последовательного доступа, при котором данные в файлах хранятся в неструктурированном виде, произвольный доступ предполагает, что файл имеет постоянную структуру. Это позволяет считывать данные в произвольном порядке. Произвольный доступ реализуется посредством оператора Open. Open Имя_файла For Random [Acc««e Доступ] [Блокировка] As [#]HandJe [ben = Длина_записи} Параметр Len определяет длину записи. Если это значение меньше, чем реальная длина записи, то возникает ошибка, если больше — то при записи файла используется больше дискового пространства, чем необходимо. Параметр Access позволяет задать права доступа к открываемому файлу. Таблица 4.7. Виды доступа при произвольном доступе Доступ Пример Без указания Open "DATE.DAT For Random As intFH Чтение (Read) Open "DATE.DAT' For Random Access Read As intFH Запись(Write) Open "DATE.DAT' For Random Access Write As intFH Чтение и запись (Read Write) Open "DATE.DAT' For Random Access Read Write As intFH Если права доступа не указаны, то по умолчанию используется Read Write. Так как этот тип доступа обычно предназначен для работы с файлами, которые могут использоваться многими пользователями или приложениями, то следует обеспечить целостность данных при коллективном использовании. Для этого следует установить параметр Lock, определяющий права доступа к открытому файлу. Этот параметр может принимать следующие значения: • Shared Файл может использоваться всеми процессами для считывания и записи. • Lock Read Никакой другой процесс не может считывать данные из файла. Данный параметр можно установить, если в данный момент никакой другой процесс не выполняет операцию чтения. • Lock Write Никакой другой процесс не может записывать данные в файл. Данный параметр можно установить, если в данный момент никакой другой процесс не выполняет операцию записи. • Lock Read Write Никакой другой процесс не может считывать или записывать. Данный параметр можно установить, если в данный момент не выполняются операции чтения или записи. Параметр Len задает длину одной записи. Для задания длины можно использовать функцию Len: Open "ADDRESS.DAT" For Random Access Write As 1 Len = 27 Open "ADDRESS.DAT" For Random Access Write As 1 Len = Len(Varname) При этом важно, чтобы при открытии файла была известна длина набора данных, что может быть проблематичным, если происхождение файла неизвестно. Ввод и вывод Get, Put Для записи и чтения данных используются соответственно операторы put и Get. Put #fS,lehandler, Ноыер_записи, Переменная Get ffilehandler, Номер_эаписи, Переменная В данном примере в файл записываются данные из переменной Addres s, причем номер записи равен 7, а затем в переменную Address считывается вторая запись файла. Put #intFH, 7, Address 'сохраняет 7Zую запись Get #intFH, 2, Address 'считывает 2Zую запись Для того чтобы в одной записи сохранить несколько значений различных типов, следует использовать пользовательские типы данных:
Это сообщение отредактировал(а) amt - 16.2.2006, 23:00 --------------------
С точки зрения банальной эрудиции не каждый индивидуум способен игнорировать тенденции парадоксальных эмоций. |
||||||||||||
|
|||||||||||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
При таком объеме - сразу считать весь файл в массив и не засорять себе голову. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "VB6" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | VB6 | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |