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

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

Читать и писать одновременно. [D7, XP]


Страницы:   1 2

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

Сотри лучше все, затем прочитай хелп и напиши заново)


Страницы:   1 2

Наверх

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