Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2013, 15:22
bloodmaster89 bloodmaster89 вне форума
Прохожий
 
Регистрация: 29.09.2013
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Чтение и запись в один txt файл

Здравствуйте уважаемые форумчане!
У меня возник такой вопрос: Можно ли реализовать одновременное чтение данных из текста файла в цикле и добавление записи в конец текстового файла.
Например.
Код:
AssignFile(outfile, 'outfile.txt'); // Открываем файл 
Reset(outfile);
while not Seekeof(outfile) do  begin
read(outfile, Xa); // Считываем переменные Xa, Xb
read(outfile, Yb);
Xamax:=((Image1.Width div 2)div mashi);
Ybmax:=((Image1.Height div 2)div mashi);
for YbNew:=0 to Ybmax do begin // В цикле проверяем их на некоторое условие
for XaNew:=0 to Xamax do begin
AssignFile(outfile, 'outfiles.txt');
ReWrite(outfile);
if  (dtf*beta)>=sqrt(sqr(XaNew-Xa)+sqr(YbNew-Yb)) then begin
Append(outfile);
writeln(outfile, XaNew,' ',YbNew); // если условие удовлетворено, записываем полученные переменные в конец того же файла.
Image1.Canvas.Pixels[x0,y0]:=RGB(255, 0, 0);
x0:=x0+mashi;
end
else begin
x0:=x0+mashi;
end;
end;
Image1.Canvas.Pixels[x0,y0]:=RGB(255, 0, 0);
y0:=y0+mashi;
end;
end;
CloseFile(outfile);
end; 
Админ: Пользуемся тегами для оформления кода!

Помоги пожалуйста или дайте совет как можно такое реализовать?

Последний раз редактировалось Admin, 14.10.2013 в 15:28.
Ответить с цитированием
  #2  
Старый 14.10.2013, 15:34
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Вот на этих строках:

Код:
for YbNew:=0 to Ybmax do begin // В цикле проверяем их на некоторое условие
for XaNew:=0 to Xamax do begin
AssignFile(outfile, 'outfiles.txt');
ReWrite(outfile);
будет возникать ошибка. Вы на каждой итерации будете открывать файл повторно. Глупость.

Классическим вариантом решения этой задачи будет:
1) Открыть для чтения исходный файл inFile
2) Открыть для записи новый файл outFile
3) Циклом считывать из него значения Xa Yb??? (уточните)
3а) Внутри цикла добавлять новые, просчитанные значения по вашему алгоритму.
4) Закрыть inFile
5) Закрыть outFile
6(не обязательно): запомнить во временную переменную имя inFile, удалить его, переименовать outFile (используя временную переменную.)
Ответить с цитированием
  #3  
Старый 14.10.2013, 16:02
bloodmaster89 bloodmaster89 вне форума
Прохожий
 
Регистрация: 29.09.2013
Сообщения: 16
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Спасибо, мысль понял

Здесь мы считываем Xa и Xb, в которых содержаться координаты точек
Код:
while not Seekeof(outfile) do  begin
read(outfile, Xa); 
read(outfile, Yb);
.......
end

Внутри этого цикла хотел поставить проверку на принадлежность точек
(которые являются центрами некоторых окружностей), другим точкам которые находятся внутри окружности и записать их в конец того же файла.


Код:
 for YbNew:=0 to Ybmax do begin // В цикле проверяем их на некоторое условие
for XaNew:=0 to Xamax do begin
AssignFile(outfile, 'outfiles.txt');
ReWrite(outfile);
if  (dtf*beta)>=sqrt(sqr(XaNew-Xa)+sqr(YbNew-Yb)) then begin
Append(outfile);
writeln(outfile, XaNew,' ',YbNew); // если условие удовлетворено, записываем полученные переменные в конец того же файла.
Image1.Canvas.Pixels[x0,y0]:=RGB(255, 0, 0);
x0:=x0+mashi;
end
else begin
x0:=x0+mashi;
end;
end;
Image1.Canvas.Pixels[x0,y0]:=RGB(255, 0, 0);
y0:=y0+mashi;
end;

Возник еще вопрос. Как можно скопировать содержимое нового файла outFile в конец файла infile?
Ответить с цитированием
  #4  
Старый 14.10.2013, 16:18
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Какого ж чёрты у вас в коде:
Код:
read(outfile, Xa); 
read(outfile, Yb);
Если вам нужен Xa Xb, а у вас Yb.

Про копирование я вообще не понял.
inFile - это исходный файл. Что вы собрались в него копировать?
outFile - это файл, который у вас должен получиться после преобразования.

Код:
AssignFile(inFile, 'outfile.txt'); // Связываем исходный файл с переменной
Reset(inFile); // Открываем файл для чтения
AssignFile(outfile, 'outfile_reCalc.txt'); // Связываем новый файл с переменной
ReWrite(outfile); // Открывай файл для записи

while not Seekeof(outfile) do
  begin // Пробегаем весь исходный файл
    read(infile, Xa); // Считываем переменные Xa, Yb
    read(infile, Yb);
    writeln(outfile, Xa,' ',Yb); //записываем текущие проверяемые точки в новый файл
    for YbNew:=0 to Ybmax do
      for XaNew:=0 to Xamax do
        begin
          // ... какие-то преобразования
          if // ... если точка принадлежит, то записываем её новые координаты
          writeln(outfile, XaNew,' ',YbNew); // запись новых координат точки в новый файл
        end;
  end;
CloseFile(inFile);
CloseFile(outfile);
На выходе получим:
Код:
Пробник1: Xa1 Yb1
Пробник2: Xa1 Yb2
Пробник3: Xa1 Yb3 
Совпадение: XaNew YbNew
Пробник4: Xa1 Yb4
Пробник5: Xa2 Yb1
и т.д.

Поправил код.

Последний раз редактировалось Uniq!, 14.10.2013 в 16:27.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter