работа с файлом в Bp7
Нужно написать програмку, которая бы в файл с рашринием *.dat (например book.dat), который уже существует, могла добовлять стоки данных, которые вводит пользователь с клавиатуры (например название, автора и год).
Заранее благодарен за любую помощь!
Люди HELP ME PLEASE!
Нужно написать програмку, которая бы в файл с рашринием *.dat (например book.dat), который уже существует, могла добовлять стоки данных, которые вводит пользователь с клавиатуры (например название, автора и год).
Заранее благодарен за любую помощь!
var f:text;
s:string;
begin
writeln('Введите данные для записи в файл');
readln(s);
assign(f,'c:\book.dat')
append(f);
writeln(f,s);
close(f);
end.
А можно в этом файле отсортироваить строки по именам?
Большое спасибо!
А можно в этом файле отсортироваить строки по именам?
Ну, в принципе да, например, скачать все это в память(если влезет) и там отсортировать.:D
var f:text;
s:string;
begin
writeln('Введите данные для записи в файл');
readln(s);
assign(f,'c:\book.dat')
append(f);
writeln(f,s);
close(f);
end.
:???: :o Так у *.dat файлов кодировка же своя есть...... или я ошибаюсь????
то файл хоть .exe пиши, всеравно он будет текстовый.
Так как тебе надо еще и сортировать, то лучше будет файл не текстовый, а типизированый сделать.
Вот че-то накалякал, но вроде работает:
Program Sorting;
Uses Crt;
Var f:File Of String;
s,s2,s3:String;
i,j:Integer;
Begin
//Добавление записей:
ClrScr;
Assign(f,'1');
ReWrite(f);
Repeat
Write('Введите данные: '); ReadLn(s);
If s<>'' Then Write(f,s);
Until s='';
Close(f);
//Сортировка:
Reset(f);
For i:=0 To FileSize(f)-1 Do
For j:=i+1 To FileSize(f)-1 Do
Begin
Seek(f,i); Read(f,s);
Seek(f,j); Read(f,s2);
If s>s2 Then
Begin
s3:=s2;
Seek(f,j); Write(f,s);
Seek(f,i); Write(f,s3);
End;
End;
Close(f);
//Очистка экрана и вывод данных из отсортированного файла
Reset(f);
ClrScr;
For i:=0 To FileSize(f)-1 Do
Begin
Read(f,s);
WriteLn(s);
End;
Close(f);
ReadLn;
End.
Если ты в Var написал f:text;
то файл хоть .exe пиши, всеравно он будет текстовый.
Так как тебе надо еще и сортировать, то лучше будет файл не текстовый, а типизированый сделать.
Вот че-то накалякал, но вроде работает:
Я знаю как с файлами работать. Просто сколько я *.dat смотрел, в виде текста его прочитать нелзя!!!!!
Я знаю как с файлами работать. Просто сколько я *.dat смотрел, в виде текста его прочитать нелзя!!!!!
Наверное я тебя неправильно понял, в ответе я имел ввиду что если файл с расширением dat изначально создать в Pascale как тестовый, то с ним можно работать как с текстовым.
Наверное я тебя неправильно понял, в ответе я имел ввиду что если файл с расширением dat изначально создать в Pascale как тестовый, то с ним можно работать как с текстовым.
если файлу присвоить тип - text - что бы вы не открывали это он будет рассматриватся как текстовый файл!!!!
если файлу присвоить тип - text - что бы вы не открывали это он будет рассматриватся как текстовый файл!!!!
Ну да, ты прав!
Я вообщето так и имел ввиду, просто маленько неправильно выразился P(
В файл записывает последнее выражение. Причем если ввести десять выражений, то последнее повториться 11 раз.
че-то не пашет как надо!
В файл записывает последнее выражение. Причем если ввести десять выражений, то последнее повториться 11 раз.
Ты чет намутил!
Давай выкладывай....
Ты чет намутил!
Давай выкладывай....
Дык я думал сначала, что я чет-то намутил не то.
Потом решил переписать код как он выложен, такая же фигня.
Чуть-чуть поменял код, он у меня стал выводить только последнюю введенную фразу (уже не 11 раз :!!!: )
Может я чето не догоняю?:-? :???:
Ввожу хоть одну хоть десять строк, последнее повторяется АДЫН РАЗ...
че-то не пашет как надо!
В файл записывает последнее выражение. Причем если ввести десять выражений, то последнее повториться 11 раз.
Напиши в вышеприведённый пример следующий код
и всё будет прекрасно работать
Uses Crt;
label
labelka;
Var f:File Of String;
s,s2,s3:String;
i,j:Integer;
Begin
ClrScr;
Assign(f,'1');
ReWrite(f);
labelka:
Write('Ddtlbnt: '); ReadLn(s);
If s<>'' Then
begin
Write(f,s);
goto labelka;
end;
Close(f);
Вот рабочий исходник...
Ввожу хоть одну хоть десять строк, последнее повторяется АДЫН РАЗ...
Спасибо!
Решил сравнить с тем, что я написал. Оказалось в одном месте ошибку допустил :D вот оно и писало дофига раз последнее!
Но и здесь есть минус, а если файл будет состоять, например из 2000 строк, такого массива не надыбаешь, придется че-нибудь другое мудрить
Кста, если необязательно использовать Pascal, то в Delphi можно отсортировать текстовый файл так:
ListBox1.Items.LoadFromFile(file);
ListBox1.Sorted:=True;
ListBox1.Items.SaveToFile(file);
можно и с текстовым, но сортировка будет посложнее, придется все данные из файла в какой-нибудь массив сохранять, потом их сортировать (в массиве), а потом из массива в файл...
Но и здесь есть минус, а если файл будет состоять, например из 2000 строк, такого массива не надыбаешь, придется че-нибудь другое мудрить
Кста, если необязательно использовать Pascal, то в Delphi можно отсортировать текстовый файл так:
ListBox1.Items.LoadFromFile(file);
ListBox1.Sorted:=True;
ListBox1.Items.SaveToFile(file);
Обязательно нужно использовать Pascal
И желательно все-таки с текстовым файлом.
Обязательно нужно использовать Pascal
И желательно все-таки с текстовым файлом.
Хотя моно и без всяких там массивов 8) ...
Значит делаем так:
var F:Text;
F2:File Of String;
1)Переделаем текстовый файл в типизированный, таким образом:
While Not Eof(f) Do
Begin
ReadLn(F,s);
Write(F2,s);
End;
2) Сортируем типизированный файл. А как, это я уже говорил выше...
ну и намбер 3) Делаем тоже самое что и в намбер 1, только наоборот:
For i:=0 To FileSize(F2)-1 Do
Begin
Read(F2,s);
WriteLn(F,s);
End;
естественно текстовый файл нужно ReWrite, перед тем как сохранять в него
Хотя моно и без всяких там массивов 8) ...
Значит делаем так:
var F:Text;
F2:File Of String;
1)Переделаем текстовый файл в типизированный, таким образом:
While Not Eof(f) Do
Begin
ReadLn(F,s);
Write(F2,s);
End;
2) Сортируем типизированный файл. А как, это я уже говорил выше...
ну и намбер 3) Делаем тоже самое что и в намбер 1, только наоборот:
For i:=0 To FileSize(F2)-1 Do
Begin
Read(F2,s);
WriteLn(F,s);
End;
естественно текстовый файл нужно ReWrite, перед тем как сохранять в него
Все заработало ничтяк, только сейчас появляется еще один файл? Может сортировку делать в буфере или проще удалить потом файл?
Все заработало ничтяк, только сейчас появляется еще один файл? Может сортировку делать в буфере или проще удалить потом файл?
Лучше удалить: Erase(F2);