Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Паскаль] работа с файлами 
:(
    Опции темы
Nevan
Дата 15.6.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2008
Где: Иваново

Репутация: нет
Всего: нет



объясните, кто может, принцип работы с файлами (текст). принцип и операторы. а то не очень въезжаю в систему  smile 
PM MAIL ICQ   Вверх
mr.Anderson
Дата 15.6.2008, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Nevan, смотри. smile

1. Файлы могут быть типизированными и текстовыми. Типизированные создаются так:
Код

var
 F : File of Integer; //файл с данными целого типа

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

Текстовые создаются так:
Код

var
 F : Text;

Или так (я чаще делаю именно этим методом):
Код

var
 F : TextFile;

2. Для работы можно использовать дельфовые функции типа OpenFile(), а можно стандартные паскалевские. Я юзаю обычно второй вариант.

Для открытия файла сначала нужно его ассоциировать с файловой переменной, созданной в первом шаге.

В обычном паскале это функция Assign(), в Делфи для этого функция AssignFile(). Формат функции Дельфа тебе укажет или справочник по паскалю. smile

После ассоциирования с переменной файл нужно открыть. Открыть можно для чтения, для перезаписи, и для дозаписи.

Чтение:
Код

Reset( f ); //f - твоя файловая переменная

Перезапись:
Код

Rewrite( f );

Дозапись:
Код

Append( f );

После этого с файлом можно работать функциями Write/WriteLn (это запись) и Read/ReadLn (чтение). Работают функции по тому же принципу, что и для консольных программ.

Заметь, что write/writeln для файла, открытого с помощью Reset(), вызовет ошибку по понятным причинам.

Дополнительно для работы есть функции типа Seek(), устанавливающие указатель на нужную позицию. По ним тоже порой справочники. Также часто используется EOF - End Of File. Используется в цикле для посимвольного чтения, насколько я помню, что-то типа такого:
Код

var
 c : Char;
//...

begin
 //f - твоя файловая переменная, открытая, например, через Reset()

 while( not EOF ) do
  c := Read(f);
end;

После работы с файлом его нужно закрыть. В паскале это так:
Код

Close( f );

В Делфи так:
Код

CloseFile( f );

Вот, пожалуй, и все. smile

Это сообщение отредактировал(а) mr.Anderson - 15.6.2008, 14:40


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Данкинг
Дата 15.6.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Недавно уже где-то приводил пример. Ну, вот ещё раз, чтение строки из файла. А вообще, поищи, подобной инфы более чем достаточно, всё же основа.

Код

var 
fff: TextFile;
begin
   assignfile(fff,'c:\aaa.txt');
   reset(fff);
   readln(fff,txt);
   Closefile(fff);
 end;



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
mr.Anderson
Дата 15.6.2008, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



ЗЫ да, еще забыл, в дельфе (да, по-моему, и в паскале) есть функции для работы с файлами типа:
Код

if( FileExists( 'myfile.txt' ) ) then
 ...

Проверяет файл на существование.

Потом такая, например:
Код

DeleteFile( f ); //ЗЫ точно не помню, получает текстовое значение или файловую переменную...

Удаляет файл.

Добавлено через 4 минуты и 10 секунд
ЗЗЫ еще вещь CreateFile(), создает файл. Имеет тьму аргументов, я ее никогда не пользовал... smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Nevan
Дата 15.6.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2008
Где: Иваново

Репутация: нет
Всего: нет



Цитата(mr.Anderson @  15.6.2008,  14:37 Найти цитируемый пост)
Дозапись:

код Pascal/Delphi
1:

Append( f );


я так понимаю запись ведётся построчно? то есть единичное использование Append - 1 строка файла?

Это сообщение отредактировал(а) Nevan - 15.6.2008, 14:47
PM MAIL ICQ   Вверх
mr.Anderson
Дата 15.6.2008, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Nevan, запись может вестись и посимвольно, как и чтение. Либо да, построчно. Еще, вроде, можно поблочно, не помню точно, можно ли и как, не пользовал. smile

По вопросу: нет, не так. Reset/Rewrite/Append - это режимы открытия файла. Их юзаешь ОДИН раз после ассоциирования файловой переменной с физическим файлом и до момента закрытия файла. А в процессе работы можно читать/записывать построчно/посимвольно/может быть, поблочно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Nevan
Дата 15.6.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 15.6.2008
Где: Иваново

Репутация: нет
Всего: нет



Цитата(mr.Anderson @  15.6.2008,  14:49 Найти цитируемый пост)
А в процессе работы можно читать/записывать построчно/посимвольно/может быть, поблочно. 


вот конкретно как переключаться между ними? допустим, я хочу часть файла вводить посимвольно, а другую часть - построчно
PM MAIL ICQ   Вверх
mr.Anderson
Дата 16.6.2008, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Nevan, тогда до какого-то нужного тебе момента пишешь в файл через Write, а в какой-то момент начинаешь писать через WriteLn. Режим менять не придется, если, конечно, нет на то причины.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.