Здрасьте! Вопрос совсем простой! Скажите какие команды используються для 1. Открытия файла на чтение 2. Открытие файла на запись 3. Получить строку из файла 4. Получить символ из файла 5. Закрыть файл 6. Записать в файл изменения Если у кого есть, то вышлите листинг программы для работы на чтение и запись с текстовыми файлами!!!
Здравствуйте, monster! Я думаю, что к Вам уже поступило много хороших ответов. Могу сказать только то, что всё это хорошо написано в Help'е. Если у Вас проблемы с английским, могу предложить перевод этого самого хелпа. Если надо, пишите: mailto:strory@newmail.ru Собственно перевод весит 913 Кб. Перевод к Borland/Turbo Pascal 7.0 (файл turbo.tph) Удачи :) Ответ отправлен: 22.12.2003, 19:10 Отправитель: Strory Отвечает fC
Здравствуйте, monster! Ответы на все свои вопросы ищи тут http://pascal.sources.ru/files/index.htm Удачи! Ответ отправлен: 22.12.2003, 15:17 Отправитель: fC Отвечает Boriss
Приветствую Вас, monster! Ежели вопрос простой, то почему сам на него не отвечаешь? Конечно, лихо было бы этим и закончить ;)) , но: 1) Reset(f); 2) Rewrite(f); и Append(f); 3) Read(f, s); и ReadLn(f, s); s - строка, куда считывать 4) См. пример 5) Close(f); 6) Flush(f); - по-видиому, имеется в виду это Программ Вы хотите? Их есть у меня:
Приложение: Ответ отправлен: 22.12.2003, 15:19 Отправитель: Boriss Отвечает sir henry
Доброе время суток, monster! 1. Сначала нужно ввести файловую переменную, например F: F : Text; s : string; ch: char; 2. Назначить этой переменной файл: Assign(F, 'файл.txt'); 3. Открытие файла для чтения: Reset(F); 4. Открытие нового файла для записи: Rewrite(F); 5. Открытие файла для добавления текста в конец: Append(F); 6. Прочитать строку из файла: ReadLn(F, s); 7. Прочитать символ из файла: Read(F, ch); 8. Записать строку в файл: WriteLn(F, s); 9. Закрыть файл: Close(F); ---- А вот записать изменения в файл - это уже совсем другая история :). При этом необходимо работать не с самим файлом, а с буфером, куда переноситься содержимое файла. Все необходимые изменения производяться в буфере, а затем файл перезаписывается. Этот тип работы с файлами описывается в разделе "Потоки". И, в общем-то,
непосредственно к файлам отношения не имеет :). Для примера см. приложение.
Приложение: Ответ отправлен: 22.12.2003, 15:50 Отправитель: sir henry Отвечает Vitally
Доброе время суток, monster! Программка проверяет наличие дискеты в дисководе - если есть - создает на дискете файл в который записывает имена и размер файлов заданного каталога... Не совсем то, что ты просил, но...
Приложение: Ответ отправлен: 22.12.2003, 16:14 Отправитель: Vitally Отвечает Drahus
Привет, Монстр! :) Первым делом нужно связать имя файла с переменной: Assign (MyFile, 'CoolText.txt'); Для MyFile нужно указать тип. Например TEXT. Можно записывать текстовую информацию (подробнее см. в справке). Затем его можно открыть на чтениезаписьдозапись. Append (MyFile); - для добавления записей. (Только если MyFile тип text). Reset (MyFile) - открывает файл для чтения. Rewrite (MyFile) - создаёт новый файл или переписывает существующий, то бишь, стирает всё из него. Получить строку из файла: Readln (MyFile, var) или Read (MyFile, var) - Первое считывает строку и переходит на следующую. Второе - считывает строку (до пробела, типа). Writeln (MyFile, var) или Write (MyFile, var) - аналогично вышенаписанному, только вместо чтения запись. Это для текстовых файлов. Для не текстовых (нетипизированных или просто FILE) исп. следующие
процедуры: BlockRead (MyFile, Buf, count, NRead) - где Buf - переменная в которую будет считыватся информация, размером count, а в NRead будет записано сколько в действительности считано. BlockWrite (MyFile, Buf, count, NWrite) - :). Close (MyFile) - закрыть файл. Есть ещё несколько процедур для работы с файлами, см. в справке. Я что-то написал, но получилась ерунда. BlockReafWrite я вроде вообще ни разу до этого не использовал. Так что глюки какие-то. Разберётесь.
Приложение: Ответ отправлен: 23.12.2003, 17:13 Отправитель: Drahus Отвечает Case_X
пџяЂпёпІпµя‚яЃя‚пІяѓяЋ п’п°яЃ, monster! Vobsce eto est dage v sholnuh uchebnikah!
Приложение: Ответ отправлен: 24.12.2003, 11:24 Отправитель: Case_X
Вопрос № 386
Еще раз здравствуйте, Boriss! Именно так все и было! :)) Только потомок должен имень свой метод Run, т.к. один класс будет обрабатывать процуру, а другой функцию. Вот так вот и началась эта бадья с Virtual. Я думал именно для этого Virtual и нужен... (Пример писать не надо! Сам могу выслать!! :D) Вы, если не сложно, проясните мне вот что: 1)Если объект не динамический а статический - как проверить существует он или нет. Или программа убъет его сама по окончании работы? 2)Конструктор нужно вызывать всегда, или только если класс использует виртуальные методы? Тоже самое с деструктором. Например для того простенького примера, который Вы мне прислали нужен вызов конструктора? 3)Вы пишите, что деструктор должен быть виртуальным, но ведь тогда а)К предку будет применен дестуктор потомка... Разве это правильно?! Мало-ли что я там понаделал у
потомка... б)Параметры у деструктора невозможно будет изменить. Не уверен, что деструктору очень нужны параметры, но - всякое может случиться. 4)Деструктор освобождает всю память, занятую объектом? Т.е. Если я в процессе работы объекта понахапал памяти под разные массивы и пр. я должен сам заботиться об их уничтожении или за меня это сделает деструктор? 5)Если есть литературка на эту тему - кинь на мыло пожалуйста!
Приветствую Вас, Vitally! 1) Надо понимать, что объект Вы разместили в обычной памяти, а не динамической: type PObj = ^TObj; TObj = object a: Array[1..1000] of real; end; и VAR Obj: TObj; (а не PObj) ? Да? Тогда он уже в памяти, ЕСЛИ ЕСТЬ К НЕМУ ОБРАЩЕНИЕ хоть одно. И программа его убъет по окончании. {Попробуйте вызывать WriteLn(MemAvail), если к тому объекту не обращаться или обратиться: Obj.a[4]:=4;} 2) ВЕРНО, конструктор нужно вызывать ОБЯЗАТЕЛЬНО, если есть виртуальные методы, или хотите разместить объект в динамической памяти. Он создает таблицу виртуальных методов (VMT), в которую заносит (при загрузке ЕГО в память) адреса методов в опер. памяти. И вызов идет не по имени, а по адресу. Тот, кто вызывает виртуальные методы (программа) даже не анализирует, есть VMT или нет, а просто обращается туда, где она ДОЛЖНА
быть. Из-за этого и ошибки идут 3а) ДЕСТРУКТОР сначала ДОЛЖЕН вызывать деструкторы предков, и только после того, как они сработают, делать свою работу. 3б) ДЕЙСТВИТЕЛЬНО, не припомню ситуации, когда деструктору нужно было бы что передавать. Идея в том, что у хорошего объекта ЕСТЬ абсолютно ВСЕ, что ему нужно для работы. Но никто не запрещает иметь несколько деструкторов (как и конструкторов). Работает ведь само слово! И важно лишь, чтоб был вызван хоть один из них (и только один!) 4) ДА освободит, если это массивы объекта, а не указатели на массивы (!). По этой причине деструктор обычно делает так: if PAr <> nil then Dispose(PAr); ... Впрочем под Виндами это уже не так фажно, если ВАША ПРОГРАММА ЗАВЕРШАЕТСЯ. Винды дают ДОСовской проге память, а потом сами и убирают. Конечно, если не резервировать память глобальную 5) Литература и есть и мало. Посмотрите на нашем сайте
www.turbopascal.tk. Там есть много учебников разного достоинства. Ежели что-то непонятно будет или лень читать, то пишите: bsurin@mail.ru или ICQ: 320096696 - может быстрее будет :)) Ответ отправлен: 22.12.2003, 16:00 Отправитель: Boriss
Вопрос № 387
В дополнение к вопросу о командах для работы с файлом! Как выделить цветом строку выведенную из файла на экран???
Здравствуйте, monster! Строку можно выделить изменив цвет текста или его фон. Все это можно найти на pascal.sources.ru Удачи! Ответ отправлен: 22.12.2003, 19:53 Отправитель: fC Отвечает Boriss
Здравствуйте, monster! Например так, как показано в приложении, ручками:
Приложение: Ответ отправлен: 22.12.2003, 17:19 Отправитель: Boriss Отвечает sir henry
Приветствую Вас, monster! Это не работа с файлами, а работа с экраном :). Переменная (или точнее типизированая константа) TextAttr:=$FT, где F - это цвет фона (шестнадцатиричная), T - это цвет текста (шестнадцатиричная). Таким образом, прежде чем вывести текст на экран, предварительно нужно присвоить значение TextAttr: TextAttr:=$07 - белые буквы на черном фоне, TextAttr:=$1E - желтые буквы на синем фоне. Ответ отправлен: 23.12.2003, 09:26 Отправитель: sir henry Отвечает Drahus
Привет, Монстр! :) В текстовом режиме В Паскале для изм. цвета вывода исп. процедура TextColor (color) - где color - цвет текста. Можно писать цифрами (2 - вроде красный) или словами: Red, Black, White и т.п. Получается: ### Read (MyFile, a); (a:string = 'Matrix has you!' :) textcolor(green); write (a); ### Интересно получается, да? :) Также можно изменить цвет фона. Для этого исп. процедура: TextBackground (color);.
Ответ отправлен: 23.12.2003, 17:13 Отправитель: Drahus
Вопрос № 388
Уважаемые эксперты!! Может вопрос несовсем корректно задан но все таки. Подскажите идею как на флопике защитить текстовую инфу от несанкционированного просмотра. С уважением Антон.
Приветствую Вас, антон! Да никак. Ну разве что разработай алгоритм шифрования или воспользуйся существующими прожками, и зашифруй инфу. Ответ отправлен: 23.12.2003, 19:03 Отправитель: Phenix Отвечает Boriss
Доброе время суток, антон! Как и на любом другом. Простейший способ - байтовая операция XOR. Используется для простейшего шифррования Ответ отправлен: 23.12.2003, 10:57 Отправитель: Boriss Отвечает Drahus
Здравствуйте, Антон! Можно сделать программу которая пометит участок диска занятый файлами как сбойный. Эта программа пусть лежит на этом же диске. При запуске она будет спрашивать пароль. Если введёте правильный, то она покажет что есть на диске. Но это думаю на Паскале будет трудновато сделать. Тут нужны знания ассемблера. Ответ отправлен: 25.12.2003, 02:59 Отправитель: Drahus Отвечает sir henry
Доброе время суток, антон! 1. Зашифровать файл. Это от флопика не зависит :). Самое универсальное средство. В инете вагон программ, которые создают виртуальные зашифрованые диски. Без знания пароля просмотреть содержимое будет невозможно. 2. Нестандартно отформатировать дискету. Например, с размером кластера в 515 байт :). 3. Если информации немного, то записать ее в загрузочный сектор дискеты. 4. Пометить кластеры как бэды, которые на самом деле таковыми не являются. Ответ отправлен: 23.12.2003, 10:18 Отправитель: sir henry Отвечает fC
Здравствуйте, антон! Идей-то много, но кто ищет - тот всегда найдет :) Ответ отправлен: 24.12.2003, 00:07 Отправитель: fC
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.