![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать фай *.txt и записать в него данные.
vegarulez © (2006-06-04 22:00:00)Доброго времени суток мастера! У меня такой вопрос. Как создать и записать данные в текстовый файл. То бишь есть к пример Tedit в котором есть данные, или допустим Tmemo...
Так вот надо к примеру создать файл и записать в него данные...
Я делаю скорее всего неправильно, и меня выскаивает ошибка в строке помеченной $$$ (Project Project2.exe raised exception class ElnOutError with message 'I/O error 103' Process stopped Use Step or Run to continue)...
Но что-то нигде не могу найти примеров создания файлов и работы с ними... поможите ссылью... или малеким примерчиком с записью hello world в файлик 1.txt
Вот как я делаю... замудрёно и не понятно... по книженции...
unit Unit1;
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls;
const
filename:string[5]='1.dat';
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
procedure ClearEdits;
private
{ Private declarations }
public
{ Public declarations }
end;
Trecord=record
Vata:string[20];
end;
var
Form1: TForm1;
implementation
{$R *.xfm}
type
Txt = file of Trecord;
var
RecFile: Txt;
procedure Tform1.ClearEdits;
var
i:integer;
begin
for i:=0 to controlcount-1 do
if controls[i] is tedit then
(controls[i] as Tedit).text:='';
end;
procedure TForm1.Button1Click(Sender: TObject);
var rec: Trecord;
tmp:Integer;
begin
rec.Vata:=Edit2.text;
$$$ tmp:=FilePos(recFile); $$$
seek(RecFile, FileSize(recFile));
write(RecFile,Rec);
seek(RecFile,tmp);
ClearEdits;
end;
end.
vegarulez (2006-06-05 23:12:00) [21]теперь возникает другой вопрос...
Сижу вот с исключениями мучаюсь.
Допустим пользователь нажимая кнопку батон1 хочет загрузить в мемо1 из файла...
а файла например ещё нет... ну не создали его ещё...
тут же выскакивает месага что де ошибка такая-то...
Я пытаюсь его отловить и убить, чтобы юзер ничего не видел, и создать этот файл...
но что-то пока ничего не выходит (((
помогите с исключением...
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
i:integer;
TempStrings: TStrings;
begin
TempStrings := TStringList.Create;
if Memo1.Lines.Count=0 then
begin
try
TempStrings.LoadFromFile('1.txt')
except
on E:EFOpenError do
begin
TFileStream.Create('1.txt',fmCreate).Free;
//Memo1.Lines:=TempStrings;
//TempStrings.Free;
//exit;
end;
//finally
//TempStrings.Free;
end;
end
else
begin
try
TempStrings.LoadFromFile('1.txt');
TempStrings.AddStrings(Memo1.Lines);
TempStrings.SaveToFile('1.txt');
finally
TempStrings.Free
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Clear;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
if i<>0 then
begin
s:=edit1.Text + ' || '+ Edit2.Text + ' || '+ edit3.Text;
memo1.Lines[i]:=s;
i:=i+1;
end
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
i:=1;
end;
end.
Loginov Dmitry (2006-06-05 10:25:00) [22]vegarulez © (05.06.06 9:04) [13]
Хорошо. А как допустим просто создать txt Файл без записи в него. Чтоб просто пустой был?
Можно так еще:
FileCreate()
или так
CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0)
Способов много...
vegarulez (2006-06-05 10:19:00) [23]to Сергей М.
Спасички. Работаит )
Сергей М. (2006-06-05 10:08:00) [24]
> как допустим просто создать txt Файл без записи в него.
> Чтоб просто пустой был?
TFileStream.Create('1.txt', fmCreate).Free;
vegarulez (2006-06-05 09:04:00) [25]Хорошо. А как допустим просто создать txt Файл без записи в него. Чтоб просто пустой был?
CreateFile(1.txt)?
Галинка (2006-06-05 03:59:00) [26]Спасибо...
Kolan (2006-06-04 22:53:00) [27]Чтобы разобраться с работой с фалами оч. советую 1 том книги руководство разработчика. С. Теёкстра и К. Пачеко. Брать тут:
www.podgoretsky.com/ddp.html
Юрий Зотов (2006-06-04 22:42:00) [28]> vegarulez © (04.06.06 22:15) [4]
> порой в книге така ватка написана... автору отровать бы что-нить...
Не верю, что в книжке не написано по AssignFile, Reset, Rewrite и Append. Так что отрывать кое-что надо кое-каким читателям.
Джо (2006-06-04 22:23:00) [29]> [7] Kolan © (04.06.06 22:21)
> Смотрика мысли совпали. :)
А какие тут могут быть разные мысли? обычная иллюстрация работы с методами TStrings... Просмотрев Хелп по его методам, такой код просто напросился бы сам даже у автора вопроса.
vegarulez (2006-06-04 22:21:00) [30]Спасички... не знал про, что в спраке искать...Теперь начался увлекательнейший процесс обучения по хелпу... ;)
Всем спасибо тема отпала...
Kolan (2006-06-04 22:21:00) [31]
> Джо © (04.06.06 22:14) [3]
Смотрика мысли совпали. :)
Джо (2006-06-04 22:17:00) [32]> [4] vegarulez © (04.06.06 22:15)
> Ахха...
> вроде понятно всё. Спасибо большое...
>
> порой в книге така ватка написана... автору отровать бы
> что-нить...
Да просто почитай Справку по TStrings. Это будет и полезно, и увлекательно :)
Kolan (2006-06-04 22:17:00) [33]Вообще в Delphi множество способов работать с файлами:
1. Через WimAPI с этим в MSDN.
2. Старый паскалевский спозоб.
Понадобится:
AssignFile,
Reset,
Append,
Rewrite,
CloseFile.
3. Можно использоватьTFileStream.
Все в спарвке есть.
--
> Тогда возникает другой вопрос. Как сделать чтобы он добавлял
> новые записи не переписывая старые....
Как простейший вариант:
Дело втом что
Memo.Lines.SaveToFile('MyFile.txt');
от мемо не зависит. У мемо есть св-воLines: TStrings.
Вот этиTStringsи делают работу по сохранению.
Поэтому можно так:
var
Strings: TStrings;
begin
Strings := TStringList.Create;
try
// Грузим старое.
Strings.LoadFromFile('File.txt');
// Добавляем к нему новое из мемо.
Stirngs.AddStrings(Memo.Lines);
// Все сохраняем
Strings.SaveToFile('File.txt');
finally
String.Free;
end;
end;
vegarulez (2006-06-04 22:15:00) [34]Ахха...
вроде понятно всё. Спасибо большое...
порой в книге така ватка написана... автору отровать бы что-нить...
Джо (2006-06-04 22:14:00) [35]> [2] vegarulez © (04.06.06 22:08)
> Спасибо. Работает.
> Тогда возникает другой вопрос. Как сделать чтобы он добавлял
> новые записи не переписывая старые....
Самое простое:
var
TempStrings: TStrings;
begin
TempStrings := TStringList.Create;
try
TempStrings.LoadFromFile('имя файла');
TempStrings.AddStrings(Memo1.Lines);
TempStrings.SaveToFile('имя файла');
finally
TempStrings.Free
end;
end;
vegarulez (2006-06-04 22:08:00) [36]Спасибо. Работает.
Тогда возникает другой вопрос. Как сделать чтобы он добавлял новые записи не переписывая старые....
Kolan (2006-06-04 22:02:00) [37]
> или допустим Tmemo...
Тут все оч. просто
Memo.Lines.SaveToFile('MyFile.txt');
И всё