| | | | |
Работа с файлами Паскаля - Текстовые файлы | Полный текст материала
Другие публикации автора: Anatoly Podgoretsky
Цитата или краткий комментарий: «... Текстовые файлы являются подмножеством двоичных файлов, но в отличие от двоичных не могут содержать весь набор символов. ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
[Текстовые файлы]
Отслеживать это обсуждение
Всего сообщений: 1610-02-2009 04:15Прошу пардону. Что-то я того... невнимательный сегодня :( |
|
10-02-2009 04:13>>> И при наличии исключений, и при выходе из подпрограммы по Exit, и при завершении программы по Halt. Такова его особенность.
Да, Geo, с Halt ты немного загнул. Halt - это же обёртка к ExitProcess. А после ExitProcess никакой код того... выполняться не может.
Конкретно в этом примере ничего страшного - все открытые файлы всё равно будут закрыты при выходе. Не совсем красиво, конечно, но допустимо. |
|
10-02-2009 03:27А Вы не гадайте, а эксперимент проведите ;-) Блок FINALLY выполняется всегда. И при наличии исключений, и при выходе из подпрограммы по Exit, и при завершении программы по Halt. Такова его особенность.
Немного ниже я написал про эксперимент=)
Вот он немного изменённый:
если нажать первую кнопку то выскакивает только надпись except, если вторую то сначала finally, потом except.
procedure TForm1.Button1Click(Sender: TObject);
begin
try
try
Button1.Width := StrToInt( 'Int' );
except
MessageBox(0, 'except', 'except', 0 );
Halt(1);
end;
finally
MessageBox(0, 'finally', 'finally', 0 );
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
try
Button2.Width := StrToInt( 'Int' );
finally
MessageBox(0, 'finally', 'finally', 0 );
end;
except
MessageBox(0, 'except', 'except', 0 );
Halt(1);
end;
end; |
|
10-02-2009 03:22и при завершении программы по Halt
Эксперимент показывает, что против лома нет приема, сообщение finally не выскакивает. |
|
10-02-2009 02:05>>> По моему, блок finally никогда не выполнится, если произойдет ошибка то в начале будет выполнен блок except и выход из программы
А Вы не гадайте, а эксперимент проведите ;-) Блок FINALLY выполняется всегда. И при наличии исключений, и при выходе из подпрограммы по Exit, и при завершении программы по Halt. Такова его особенность. |
|
09-02-2009 23:53 try
try
Reset(InFile); // открываем входной файл
Rewrite(OutFile); // создаем выходной файл
while not EOF(InFile) do // крутим пока не конец файла
begin
Readln(Infile, S); // читаем строку
if Length(S) > 0 // на вход функции можно
then // подавать только не пустые строки
begin
OemToChar(Pchar(S), Pchar(S));
WriteLn(Outfile, S); // записываем строку
end
else
begin
WriteLn(Outfile); // записываем пустую строку
end;
end;
except
Halt(2); // любая ошибка
// не удалось преобразовать файлы
end;
finally
CloseFile(InFile);
CloseFile(OutFile);
end;
По окончанию цикла или в случае ошибки управление поступает в защищенный блок finally, где оба файла закрываются и управление передается операционной системе.
По моему, блок finally никогда не выполнится, если произойдет ошибка то в начале будет выполнен блок except и выход из программы.
Возможно, надо поменять местами блоки finally и except.
Для теста написал программу:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
try
Button1.Width := StrToInt( 'Int' );
except
ShowMessage( 'except' );
Halt(1);
end;
finally
ShowMessage( 'finally' );
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
try
try
Button2.Width := StrToInt( 'Int' );
finally
ShowMessage( 'finally' );
end;
except
ShowMessage( 'except' );
Halt(1);
end;
end;
если нажать первую кнопку то выскакивает только надпись except, если вторую то сначала finally, потом except.
|
|
18-12-2008 23:34Ошибка:
InFilename := ParamStr(1);
if ParamCount = 2 then
OutFileName := ParamStr(1)
Правильно:
InFilename := ParamStr(1);
if ParamCount = 2 then
OutFileName := ParamStr(2)
Сообщение не подписано |
|
21-04-2006 01:05Решил проблему перебором текста посимвольно.
|
|
20-04-2006 23:00Подскажите, плиз.
Также считываю текстовый файл по строкам
Readln(LogFile,str);
НО!!! Строку с одним пробелом не считывает, тупо цикл пропускает.
Пустая строка разделитель между блоками (сообщениями). |
|
18-06-2004 23:37сообщение от автора материала Такой проблемы быть не должно, это системная библиотека, это может означать какие ни будь проблемы с системой. |
|
18-06-2004 13:17я начала делать перекодировку и прога ругается на user32.dll. Как этого избежать? Ругается именно на строку OemToChar(Pchar(s), Pchar(s)) |
|
18-06-2004 12:55Спасибо ОГРОМНОЕ!!!
Я как раз сталкнулась с проблемой сохранения текста в файл в кодировке Win-1251 |
|
15-12-2003 16:35Мне понравилось :-)
Анатолий, большое Вам спасибо :) |
|
16-11-2003 22:44 Материал легок и доступен, приятно было с ним ознакомиться.
Спасибо автору. |
|
15-09-2003 17:00сообщение от автора материала Я как раз думал вю время написания о неоьходимости перекрестных ссылок. В принципе на странице есть ссылки "Предыдущий, следующий, все уроки". Но если решу добавить дополнительные ссылки, то только после окончания добавления всех уроков. Иначе не на что ссылаться. |
|
15-09-2003 13:03Маленькое замечание, в связанных темах (наподобии этой) если можно сразу приводить список остальных уроков в конце/начале статьи. Этакое "смотри также". |
|
|
|