Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.10;
Скачать: CL | DM;

Вниз

Читать и писать одновременно.   Найти похожие ветки 

 
mr1Andersen   (2008-01-17 13:22) [0]

Вот программный код:

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 13:28) [1]

> В папке в которую сохранена прожка нужно создать (1.txt)

Почему бы программе самой не создавать его, если его нет?

> в который записываем следующий текст (блаблаблаbmwбла бла)

Зачем?
> Запускаем прогу, - ошибка!  Ни возможно читать и писать
> одновременно ТЕКСТОВЫЙ файл.

Вретес, при запуске программы, она с файлом ничего не делает.
Программку в которой "бла-бла" писали закрыть бы надо :)


 
mr1Andersen   (2008-01-17 13:34) [2]


> Программку в которой "бла-бла" писали закрыть бы надо :)


Что Вы имеете ввиду?


 
Dennis I. Komarov ©   (2008-01-17 13:37) [3]

> procedure TForm1.Button2Click(Sender: TObject);
> var
> f:TextFile;
> begin
> AssignFile(f,"1.txt");  
> Reset(f);
> Append(f);

>  writeln(f,"Новая запись");
> CloseFile(f);
> end;

Просмотрел :(


 
mr1Andersen   (2008-01-17 13:37) [4]

Если создать (2.txt) и поставить 2-рой кнопке код:

procedure TForm1.Button2Click(Sender: TObject);
var
f:TextFile;
begin
AssignFile(f,"1.txt");  
Reset(f);
Append(f);
 writeln(f,"Новая запись");
CloseFile(f);
end;
end.

Тогда все работает


 
mr1Andersen   (2008-01-17 13:38) [5]

Извините, вот так:

procedure TForm1.Button2Click(Sender: TObject);
var
f:TextFile;
begin
AssignFile(f,"2.txt");  
Reset(f);
Append(f);
 writeln(f,"Новая запись");
CloseFile(f);
end;
end.


 
Dennis I. Komarov ©   (2008-01-17 13:40) [6]

> [4] mr1Andersen   (17.01.08 13:37)

И чем он изменился?


 
mr1Andersen   (2008-01-17 13:41) [7]

AssignFile(f,"2.txt");


 
Dennis I. Komarov ©   (2008-01-17 13:42) [8]


> [7] mr1Andersen   (17.01.08 13:41)

Зачем Reset?


 
mr1Andersen   (2008-01-17 13:44) [9]

А как иначе?


 
{RASkov} ©   (2008-01-17 13:46) [10]

> [9] mr1Andersen   (17.01.08 13:44)

F1 почитать? Тама таких примеров - вагон и маленькая тележка)


 
Смирнов   (2008-01-17 13:49) [11]


> А как иначе?

Reset - открытие файла для чтения
Append - открытие существующего файла для записи (добавления)
Rewrite - создание нового файла для записи (если уже есть - перезапишется).
А вот reset и Append одновременно - непонятно однако зачем...


 
mr1Andersen   (2008-01-17 13:57) [12]

Если я стираю reset или Append та же ошибка


 
Malik   (2008-01-17 13:59) [13]


> Ни возможно читать и писать одновременно ТЕКСТОВЫЙ файл

По коректнее надо выражаться, т.к. паралельность (или по вашему "одновременность") можно только организовать при многопоточной архитектуре программы.


 
{RASkov} ©   (2008-01-17 14:00) [14]

> [12] mr1Andersen   (17.01.08 13:57)
> Если я стираю reset или Append

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


 
Сергей М. ©   (2008-01-17 14:00) [15]


> mr1Andersen


Файл-то предполагается большого размера ? Насколько большого ?


 
Dennis I. Komarov ©   (2008-01-17 14:06) [16]

> [15] Сергей М. ©   (17.01.08 14:00)

Судя по коду:
writeln(f,"Новая запись");
14 Байт :)


> [12] mr1Andersen   (17.01.08 13:57)

Не верю! (С)


 
{RASkov} ©   (2008-01-17 14:09) [17]

> [16] Dennis I. Komarov ©   (17.01.08 14:06)
> Судя по коду:
> writeln(f,"Новая запись");
> 14 Байт :)

+14 байт, а не всего
:)
Но я тоже не верю, что файл гиганских размеров, да и не в размере дело.....


 
mr1Andersen   (2008-01-17 14:13) [18]


> Файл-то предполагается большого размера ? Насколько большого
> ?


Гдето 5-10 Мегабайт


 
Dennis I. Komarov ©   (2008-01-17 14:15) [19]

> [17] {RASkov} ©   (17.01.08 14:09)

Да, но он и их еще не смог вставить :) И про "бла-бла" я забыл :)


 
Dennis I. Komarov ©   (2008-01-17 14:21) [20]

А если еще на
procedure TForm1.Button1Click(Sender: TObject);
посмотреть, то можно предположить, что это некое подобие БД :)
И с какого оно вдруг TextFile решило стать....

ShowMessage("Найдено товар");

у, это уже пахнет денюжкой :)


 
mr1Andersen   (2008-01-17 14:24) [21]

Люди, если создать (2.txt) и заменить код 2-рой кнопке на
AssignFile(f,"2.txt");
Все идеально . Вопрос как этого достичь в первом варианте (записывать не в 2-й а в 1-й txt)?


 
{RASkov} ©   (2008-01-17 14:24) [22]

> [18] mr1Andersen   (17.01.08 14:13)
> f1: TextFile;

Текстовый файл открывается либо для чтения либо для записи, но не все вместе....
Если текстовый файл ранее уже был открыт с помощью Reset или Rewrite то вызов процедуры Append
приведет к закрытию данного файла и открытию его вновь, но уже для добавления записей, при этом
указатель файла устанавливается в его конец....

Если нужно и чтение и записиь и перемещение по файлу, посмотри в сторону нетипизированных файлов...
Или TFileStream...


 
Dennis I. Komarov ©   (2008-01-17 14:29) [23]

> [21] mr1Andersen   (17.01.08 14:24)

1) Почитай справку по теме
2) Убери Reset
3) Возможно 1.txt открыт др. программой :) [2]

ЗЫ
 Ты даже не удосужился сказать, когда у тебя возникает сие, Редиска!


 
Сергей М. ©   (2008-01-17 14:31) [24]


> mr1Andersen   (17.01.08 14:13) [18]


При таком мизерном объеме проще будет воспользоваться классом TStringList


 
Dennis I. Komarov ©   (2008-01-17 14:32) [25]

> [24] Сергей М. ©   (17.01.08 14:31)

Сейчас будет "А как" :)


 
mr1Andersen   (2008-01-17 14:34) [26]


> ЗЫ   Ты даже не удосужился сказать, когда у тебя возникает
> сие, Редиска!

это ты о чем?


 
mr1Andersen   (2008-01-17 14:37) [27]


> {RASkov}


Спасибо за ответ.


> Текстовый файл открывается либо для чтения либо для записи,
>  но не все вместе....


жаль конечно.


 
{RASkov} ©   (2008-01-17 14:40) [28]

> [27] mr1Andersen   (17.01.08 14:37)
> жаль конечно.

А почему бы не подумать над [24]?
LoadFromFile();
Работаем с данными файла
SaveToFile();


 
Dennis I. Komarov ©   (2008-01-17 14:49) [29]

> [26] mr1Andersen   (17.01.08 14:34)

[0]
Запускаем прогу, - ошибка!  Ни возможно читать и писать одновременно ТЕКСТОВЫЙ файл.
[1]
Вретес, при запуске программы, она с файлом ничего не делает.


 
mr1Andersen   (2008-01-17 14:51) [30]

Извините, нажмите пожалуйста на первую кнопку


 
Dennis I. Komarov ©   (2008-01-17 14:54) [31]

> [30] mr1Andersen   (17.01.08 14:51)

То-то я смотрю вся ветка в обсуждении второго кнопаря :)))))


 
mr1Andersen   (2008-01-17 14:56) [32]


> Dennis I. Komarov


Вы совершенно правы


 
Dennis I. Komarov ©   (2008-01-17 14:57) [33]

Оказывается:
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;



Страницы: 1 вся ветка

Текущий архив: 2008.02.10;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.061 c
2-1200253396
AntonUSAnoV
2008-01-13 22:43
2008.02.10
по поводу findwindow


2-1200244394
яблочго
2008-01-13 20:13
2008.02.10
сортировка массива записей


2-1200674054
Dark
2008-01-18 19:34
2008.02.10
XML


2-1200657601
_Shuler_
2008-01-18 15:00
2008.02.10
theme


2-1200445189
VladSel
2008-01-16 03:59
2008.02.10
сравнение чисел