Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как создать фай *.txt и записать в него данные.


Страницы:   1 2

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');
И всё


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо