![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Читать и писать одновременно. [D7, XP]
mr1Andersen © (2008-01-17 13:22:00)Вот программный код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Hour,Min,Sec,MSec,Year,Month,Day:Word;
xHour,xMin,xSec,xYear,xMonth,xDay,xc:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,r: String;
i,k1:integer;
f1: TextFile;
t : boolean;
begin
if FileExists('1.txt')=True then
begin
AssignFile(f1,'1.txt');
reset(f1);
While Not EOF(f1) do
If Not EOLN(f1) then
BEGIN
Readln(f1,a);
k1:=length(a);
i := 1;
Begin
repeat
if (a[i]='b') and (a[i+1]='m') and (a[i+2]='w') then
begin
ShowMessage('Найдено товар');
Button2.OnClick(Button2);
end;
Inc(i);
until (i >= k1);
end;
END;
CloseFile(f1);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
f:TextFile;
begin
AssignFile(f,'1.txt');
Reset(f);
Append(f);
writeln(f,'Новая запись');
CloseFile(f);
end;
end.
В папке в которую сохранена прожка нужно создать (1.txt) в который записываем следующий текст (блаблаблаbmwбла бла).
Запускаем прогу, - ошибка! Ни возможно читать и писать одновременно ТЕКСТОВЫЙ файл.
Подскажите можно как то обойти это?
Dennis I. Komarov (2008-01-17 14:57:00) [1]Оказывается:
procedure TForm1.Button1Click(Sender: TObject);
var
a,r: String;
i,k1:integer;
f1: TextFile;
t : boolean;
begin
if FileExists('1.txt')=True then
begin
AssignFile(f1,'1.txt');
reset(f1);
While Not EOF(f1) do
If Not EOLN(f1) then
BEGIN
Readln(f1,a);
k1:=length(a);
i := 1;
Begin
repeat
if (a[i]='b') and (a[i+1]='m') and (a[i+2]='w') then
begin
ShowMessage('Найдено товар');
Button2.OnClick(Button2);
end;
Inc(i);
until (i >= k1);
end;
END;
CloseFile(f1);
end;
end;
mr1Andersen (2008-01-17 14:56:00) [2]
> Dennis I. Komarov
Вы совершенно правы
Dennis I. Komarov (2008-01-17 14:54:00) [3]> [30] mr1Andersen (17.01.08 14:51)
То-то я смотрю вся ветка в обсуждении второго кнопаря :)))))
mr1Andersen (2008-01-17 14:51:00) [4]Извините, нажмите пожалуйста на первую кнопку
Dennis I. Komarov (2008-01-17 14:49:00) [5]> [26] mr1Andersen (17.01.08 14:34)
[0]
Запускаем прогу, - ошибка! Ни возможно читать и писать одновременно ТЕКСТОВЫЙ файл.
[1]
Вретес, при запуске программы, она с файлом ничего не делает.
{RASkov} (2008-01-17 14:40:00) [6]> [27] mr1Andersen (17.01.08 14:37)
> жаль конечно.
А почему бы не подумать над [24]?
LoadFromFile();
Работаем с данными файла
SaveToFile();
mr1Andersen (2008-01-17 14:37:00) [7]
> {RASkov}
Спасибо за ответ.
> Текстовый файл открывается либо для чтения либо для записи,
> но не все вместе....
жаль конечно.
mr1Andersen (2008-01-17 14:34:00) [8]
> ЗЫ Ты даже не удосужился сказать, когда у тебя возникает
> сие, Редиска!
это ты о чем?
Dennis I. Komarov (2008-01-17 14:32:00) [9]> [24] Сергей М. © (17.01.08 14:31)
Сейчас будет "А как" :)
Сергей М. (2008-01-17 14:31:00) [10]
> mr1Andersen (17.01.08 14:13) [18]
При таком мизерном объеме проще будет воспользоваться классом TStringList
Dennis I. Komarov (2008-01-17 14:29:00) [11]> [21] mr1Andersen (17.01.08 14:24)
1) Почитай справку по теме
2) Убери Reset
3) Возможно 1.txt открыт др. программой :) [2]
ЗЫ
Ты даже не удосужился сказать, когда у тебя возникает сие, Редиска!
{RASkov} (2008-01-17 14:24:00) [12]> [18] mr1Andersen (17.01.08 14:13)
> f1: TextFile;
Текстовый файл открывается либо для чтения либо для записи, но не все вместе....
Если текстовый файл ранее уже был открыт с помощью Reset или Rewrite то вызов процедуры Append
приведет к закрытию данного файла и открытию его вновь, но уже для добавления записей, при этом
указатель файла устанавливается в его конец....
Если нужно и чтение и записиь и перемещение по файлу, посмотри в сторону нетипизированных файлов...
Или TFileStream...
mr1Andersen (2008-01-17 14:24:00) [13]Люди, если создать (2.txt) и заменить код 2-рой кнопке на
AssignFile(f,'2.txt');
Все идеально . Вопрос как этого достичь в первом варианте (записывать не в 2-й а в 1-й txt)?
Dennis I. Komarov (2008-01-17 14:21:00) [14]А если еще на
procedure TForm1.Button1Click(Sender: TObject);
посмотреть, то можно предположить, что это некое подобие БД :)
И с какого оно вдруг TextFile решило стать....
ShowMessage('Найдено товар');
у, это уже пахнет денюжкой :)
Dennis I. Komarov (2008-01-17 14:15:00) [15]> [17] {RASkov} © (17.01.08 14:09)
Да, но он и их еще не смог вставить :) И про "бла-бла" я забыл :)
mr1Andersen (2008-01-17 14:13:00) [16]
> Файл-то предполагается большого размера ? Насколько большого
> ?
Гдето 5-10 Мегабайт
{RASkov} (2008-01-17 14:09:00) [17]> [16] Dennis I. Komarov © (17.01.08 14:06)
> Судя по коду:
> writeln(f,'Новая запись');
> 14 Байт :)
+14 байт, а не всего
:)
Но я тоже не верю, что файл гиганских размеров, да и не в размере дело.....
Dennis I. Komarov (2008-01-17 14:06:00) [18]> [15] Сергей М. © (17.01.08 14:00)
Судя по коду:
writeln(f,'Новая запись');
14 Байт :)
> [12] mr1Andersen (17.01.08 13:57)
Не верю! (С)
Сергей М. (2008-01-17 14:00:00) [19]
> mr1Andersen
Файл-то предполагается большого размера ? Насколько большого ?
{RASkov} (2008-01-17 14:00:00) [20]> [12] mr1Andersen (17.01.08 13:57)
> Если я стираю reset или Append
Сотри лучше все, затем прочитай хелп и напиши заново)