Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
ВнизКак создать фай *.txt и записать в него данные. Найти похожие ветки
← →
vegarulez © (2006-06-04 22:00) [0]Доброго времени суток мастера! У меня такой вопрос. Как создать и записать данные в текстовый файл. То бишь есть к пример 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.
← →
Kolan © (2006-06-04 22:02) [1]
> или допустим Tmemo...
Тут все оч. простоMemo.Lines.SaveToFile("MyFile.txt");
И всё
← →
vegarulez © (2006-06-04 22:08) [2]Спасибо. Работает.
Тогда возникает другой вопрос. Как сделать чтобы он добавлял новые записи не переписывая старые....
← →
Джо © (2006-06-04 22:14) [3]> [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:15) [4]Ахха...
вроде понятно всё. Спасибо большое...
порой в книге така ватка написана... автору отровать бы что-нить...
← →
Kolan © (2006-06-04 22:17) [5]Вообще в 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;
← →
Джо © (2006-06-04 22:17) [6]> [4] vegarulez © (04.06.06 22:15)
> Ахха...
> вроде понятно всё. Спасибо большое...
>
> порой в книге така ватка написана... автору отровать бы
> что-нить...
Да просто почитай Справку по TStrings. Это будет и полезно, и увлекательно :)
← →
Kolan © (2006-06-04 22:21) [7]
> Джо © (04.06.06 22:14) [3]
Смотрика мысли совпали. :)
← →
vegarulez © (2006-06-04 22:21) [8]Спасички... не знал про, что в спраке искать...Теперь начался увлекательнейший процесс обучения по хелпу... ;)
Всем спасибо тема отпала...
← →
Джо © (2006-06-04 22:23) [9]> [7] Kolan © (04.06.06 22:21)
> Смотрика мысли совпали. :)
А какие тут могут быть разные мысли? обычная иллюстрация работы с методами TStrings... Просмотрев Хелп по его методам, такой код просто напросился бы сам даже у автора вопроса.
← →
Юрий Зотов © (2006-06-04 22:42) [10]> vegarulez © (04.06.06 22:15) [4]
> порой в книге така ватка написана... автору отровать бы что-нить...
Не верю, что в книжке не написано по AssignFile, Reset, Rewrite и Append. Так что отрывать кое-что надо кое-каким читателям.
← →
Kolan © (2006-06-04 22:53) [11]Чтобы разобраться с работой с фалами оч. советую 1 том книги руководство разработчика. С. Теёкстра и К. Пачеко. Брать тут:
www.podgoretsky.com/ddp.html
← →
Галинка © (2006-06-05 03:59) [12]Спасибо...
← →
vegarulez © (2006-06-05 09:04) [13]Хорошо. А как допустим просто создать txt Файл без записи в него. Чтоб просто пустой был?
CreateFile(1.txt)?
← →
Сергей М. © (2006-06-05 10:08) [14]
> как допустим просто создать txt Файл без записи в него.
> Чтоб просто пустой был?
TFileStream.Create("1.txt", fmCreate).Free;
← →
vegarulez © (2006-06-05 10:19) [15]to Сергей М.
Спасички. Работаит )
← →
Loginov Dmitry © (2006-06-05 10:25) [16]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 23:12) [17]теперь возникает другой вопрос...
Сижу вот с исключениями мучаюсь.
Допустим пользователь нажимая кнопку батон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.
← →
Джо © (2006-06-05 23:51) [18]
if FileExists(Filename) then
...
else
...
← →
vegarulez © (2006-06-06 00:21) [19]Спасибо,
но это, всё же, не работа с исключениями...
Я хочу посмотреть как с исключениями работать, хотя бы один рабочий пример, чтоб понять, т.к. они ещё у меня используются в одном месте программы, где я скидываю данные в бд, а связь и доступ к бд не всегда есть, поэтому приходится в текстовик данные сохранять. Так вот при обращении к бд и надо будет использовать исключения, чтоб когда не было доступа, и открытия подключения к бд не произошло, по вызову события чтоб данные автоматом скидывались в текстовик, и естесственно пользователь не видел всяких не нужных и непонятных ему месаг... и ошибок...
← →
Сергей М. © (2006-06-06 08:46) [20]
> vegarulez © (06.06.06 00:21) [19]
Для этого имеется готовое решение - TClientDataSet
← →
vegarulez © (2006-06-06 09:05) [21]Так TClientDataSet тоже нуждается в подключении....
А при подключении может выпасть ошибка...
Я использую
SQLConnection + SQLQuery
И делаю вот как
datamodule8.SQLConnection1.Open; // Открываю соединение
datamodule8.SQLnum.SQL.Clear; // Очищаю буфер запроса
datamodule8.SQLnum.SQL.Add("INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ("+ Form1.edit1.text + Form1.Edit2.Text +", "+ Form2.edit1.text +", ""+ (prd) +"",""+ (strd) +"",""+ (hash) +"")"); // Формирую запрос
datamodule8.SQLQuery.ExecSQL(); // Выполняю запрос
но когда открываешь Open, то при выключенной бд или отсутствующей связи обязательно выскочет исключение.
← →
Сергей М. © (2006-06-06 09:19) [22]
> TClientDataSet тоже нуждается в подключении.
Вот как раз и не нуждается.
Подключение ему нужно лишь в момент синхронизации изменений в его автономном дейтасете с соотв данными в БД. Автономный же дейтасет м.б. создан методами CreateDataSet (новый), LoadFromFile (ранее сохраненный), по окончанию сессии автономной работы приложения (т.е. сессии без подключения к БД) дейтасет м.б. сохранен в файл для последующей загрузки из этого файла.
← →
vegarulez © (2006-06-06 09:28) [23]>Подключение ему нужно лишь в момент синхронизации
Так в этот момент и выскочит месага, что связи нет... В момент синхронизации... мне нужно это отловить.
И при выводе что нет связи сохранит в файл, потом при повторном подключении и отправке следующего запроса, открыть файл и отправить ранее не отправленные данные.
Это одно, а второе мне не надо их хранить, и запршивать всю таблицу и хранить в нём, и изменять её, и синхронизировать изменения...
мне надо просто добавить в таблицу быстро и молниеносно (как серпом по ... МТСу) )))
Без всяких синхронизаций. Однонаправленым запросом.
← →
Сергей М. © (2006-06-06 09:42) [24]
> vegarulez © (06.06.06 09:28) [23]
Ты бы хоть справку почитал что ли .. к этому компоненту ... прежде чем про "серпы" рассуждать ..
Этот компонент сделает все что тебе нужно !
← →
Ivolg © (2006-06-06 10:53) [25]Попробуй таким методом:
try
datamodule8.SQLConnection1.Open;
datamodule8.SQLnum.SQL.Clear;
datamodule8.SQLnum.SQL.Add("INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ("+ Form1.edit1.text + Form1.Edit2.Text +", "+ Form2.edit1.text +", ""+ (prd) +"",""+ (strd) +"",""+ (hash) +"")");
datamodule8.SQLQuery.ExecSQL();
except
ShowMessage("Ошибка подключения к БД");
Memo1.Lines.SaveToFile("db.txt");
end;
← →
vegarulez © (2006-06-06 11:29) [26]2 Ivolg ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
2 Сергей М. ©
Тока начал читать...
У тебя есть какие-нить примеры к этому компоненту?
Дай ссыль...
← →
Сергей М. © (2006-06-06 15:17) [27]
> Дай
Они у тебя перед носом - в демо-проектах в штатной поставке Делфи.
← →
Ivolg © (2006-06-06 21:58) [28]>vegarulez ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
А кто тебе мешает удалить функцию, которая выводит сообщение ?ShowMessage("Ошибка подключения к БД");(
← →
Ivolg © (2006-06-06 21:58) [29]>vegarulez ©
Мне как раз таки и не надо выводить месаг и прочих сообщений...
Я об этом писал выше... Юзер не должен видеть сообщений об ошибках и прочей ерунды. Всё должно записаться в файл и при повторном подключении прочесться от туда и записаться в бд.
А кто тебе мешает удалить функцию, которая выводит сообщение ?ShowMessage("Ошибка подключения к БД");(
← →
Ivolg © (2006-06-06 22:00) [30]Извеняюсь за флуд, у меня что-то лагнуло...
← →
vegarulez © (2006-06-06 22:00) [31]Пытаюсь так сделать - ругается... (
Как правильно прописать?
Помоги...
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.SQLClientDataSet1.CommandText:="INSERT INTO `diski` (`account`, `value`, `product`, `data_in`, `hash` ) VALUES ("+ Form1.edit1.text + Form1.Edit2.Text +", "+ Form2.edit1.text +", ""+ (prd) +"",""+ (strd) +"",""+ (hash) +"")";
Form2.SQLClientDataSet1.SaveToFile("123.bin",dfBinary);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
Form2.SQLClientDataSet1.LoadFromFile("123.bin");
Form2.SQLClientDataSet1.Active:=true;
end;
← →
Ivolg © (2006-06-06 22:09) [32]>vegarulez ©
Ругается где ? При самом запросе или при подключении ?
← →
vegarulez © (2006-06-06 22:16) [33]Млин... наконец-то понял... вот я тупень...
просто когда запускал в делфи и не копилял в ехе он всегда выводил exception сообщение... и я его пытался выловить и убить чтоб оно не появлялось...
И никак не понимал, как это люди говорят, что работает и нет месаг всяких, а у меня работает и при исключении вываливается всегда месага...
блин... Оказывается просто в exe компильнуть нуно было...
спасибо Ivolg ©.. вразумил...
Тяжело в лечении, легко в раю... (с)
← →
Ivolg © (2006-06-06 22:18) [34]>vegarulez ©
Пожайлуста...
← →
vegarulez © (2006-06-06 22:19) [35]Раннее спасибо написал, за то что относилось к SQLQuery + SqlConnection понял что почём.
Теперь про использование SQLClientDataSet1...
Ругается, что де не могу загрузить с файла... так как файл он походу не создаёт т.к. его нет в директории с проектом..
естественно загрузить с него тоже не может так как его нет...
← →
vegarulez © (2006-06-06 22:28) [36]Ругается также при самом запросе, что Cursor not returned from Query... так запрос скорее всего однонаправленный... ничего не возвращающий...
← →
Сергей М. © (2006-06-07 10:52) [37]
> загрузить с него тоже не может так как его нет
Так создай !
На то тебе и даны методы SaveToFile(), SaveToStream()
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.01 c