Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка записи в файл 
:(
    Опции темы
LesnoyChelovek
Дата 15.11.2006, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



При выполнении программы пишет ошибка вводы-вывода. Код:
Код

type rec=record
     slovo:string[255];
     per:string[255];
     end;

 var
   Form2: TForm2;
  sl, perevod: string;
  i,j,n: integer;
  r: rec;
  st: array of rec;
  f: file of rec;

implementation

{$R *.dfm}


procedure TForm2.Button1Click(Sender: TObject);
begin
AssignFile (F, '1.txt');
Reset (F);
j:=1;
while not EOF(f) do
begin
  read(F,st[j]);
end;
with st[j] do
begin
  r.slovo:=edit1.Text;
  r.per:=edit2.Text;
end;
CloseFile(F);
Rewrite(F);
for n:=1 to j do
begin
  write(F,st[n]);
end;
CloseFile(F);
end;



--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Alexeis
Дата 15.11.2006, 01:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



LesnoyChelovek, вижу сначала идет чтение, а потом запись, может файл попросту еще не существует?


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
anwe
Дата 15.11.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: нет
Всего: 23



LesnoyChelovek, во-первых у тебя нет расширения динамического массива st, во-вторых, надо учитывать, что нумерация его элементов идет с нуля. Так надо:
Код

j:=1;
SetLength(st,j);
while not EOF(f) do
begin     //это, кстати, тут не надо
  read(F,st[j-1]);
end;     //и это

И не понятно зачем ты дважды освобождаешь файл CloseFile(F).
PM MAIL   Вверх
LesnoyChelovek
Дата 15.11.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



Цитата

LesnoyChelovek, вижу сначала идет чтение, а потом запись, может файл попросту еще не существует?


В том-то и дело что файл существует.


--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Alexeis
Дата 15.11.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Ой ну тут столько ошибок, что сложно понять как это должно было работать.
LesnoyChelovek, Нужно поглядеть на содержимое файла.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Sunvas
Дата 15.11.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Припиши директиву компилятора {$i-}  smile 

Это сообщение отредактировал(а) Sunvas - 15.11.2006, 18:56


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
LesnoyChelovek
Дата 21.11.2006, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



В общем есть файл 1.txt он должен туда писать слово и его перевод.
Код уже преобрёл такой вид:
Код

    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type rec=record
     slovo:string[255];
     per:string[255];
     end;

 var
   Form2: TForm2;
  sl, perevod: string;
  i,j,n: integer;
  r: rec;
  st: array of rec;
  f: file of rec;

implementation

{$R *.dfm}


procedure TForm2.Button1Click(Sender: TObject);
{$i-}
begin
AssignFile (F, '1.txt');
Reset (F);
j:=1;
while not EOF(f) do
begin
  read(F,st[j]);
end;
with st[j] do
begin
  r.slovo:=edit1.Text;
  r.per:=edit2.Text;
end;
Rewrite(F);
for n:=1 to j do
begin
  write(F,st[n]);
end;
CloseFile(F);
end;


end.


При этом файл создаётся, но записи в него нет.


--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Sunvas
Дата 21.11.2006, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Попробуй заменить это
Цитата(LesnoyChelovek @  21.11.2006,  21:49 Найти цитируемый пост)
 
Код

f: file of rec;

это
Код

f:textfile;


Добавлено @ 22:14 
Хотя в принципе алгорим не понятен:

Цитата(LesnoyChelovek @  21.11.2006,  21:49 Найти цитируемый пост)
Код

j:=1;    
while not EOF(f) do    
begin    
  read(F,st[j]);    
end;


Почему ты не увиличваешь j?

Смысл этого вообще не ясен:
Цитата(LesnoyChelovek @  21.11.2006,  21:49 Найти цитируемый пост)
Код

with st[j] do    <----
begin    <-----
  r.slovo:=edit1.Text;    
  r.per:=edit2.Text;    
end;<----




Это сообщение отредактировал(а) Sunvas - 21.11.2006, 22:16


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
LesnoyChelovek
Дата 21.11.2006, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



Дело в том что txt используется в режиме демо, т.е. в идеале будет расширение lgn.

Увеличение j добавил.

Смысл фрагмента c with: для строк j+1 в запись slovo из поля 1, а в per из поля 2.

Очередная эволюция вылилась в: 
Код

rocedure TForm2.Button1Click(Sender: TObject);
{$i-}
begin
AssignFile (F, '1.txt');
Reset (F);
j:=1;
while not EOF(f) do
begin
  read(F,st[j]);
  j:=j+1;
end;
with st[j+1] do
begin
  r.slovo:=edit1.Text;
  r.per:=edit2.Text;
end;
Rewrite(F);
for n:=1 to j do
begin
  write(F,st[n]);
end;
CloseFile(F);
end;



--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Sunvas
Дата 21.11.2006, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



Цитата(LesnoyChelovek @  21.11.2006,  22:45 Найти цитируемый пост)

Код

with st[j+1] do    
begin    
  r.slovo:=edit1.Text;    
  r.per:=edit2.Text;    
end;

Может тогда так:
Код

with st[j+1] do    
begin    
  slovo:=edit1.Text;    
  per:=edit2.Text;    
end;


Добавлено @ 23:59 
Но все-равно для участка 
Код

with st[j+1] do    
begin    
 slovo:=edit1.Text;    
  per:=edit2.Text;    
end;

Я немного не могу понять смысл - ты же присваиваешь значения только для st[j+1].



--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
LesnoyChelovek
Дата 23.11.2006, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


странник Интернета
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 27.2.2006
Где: Русь

Репутация: нет
Всего: 10



Вот именно, что мы последней строке присваиваем значение. Т.е. там идёт список:
строка 1 
строка 2
....
строка j
и в строку j+1 мы записываем значение.


--------------------
Делай добро и бросай его в воду... оно не утонет.. добром к тебе вернеться.
http://picasaweb.google.com/LesnoyChelovek/Photo
PM MAIL   Вверх
Sunvas
Дата 23.11.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Соль и сахар
****


Профиль
Группа: Участник
Сообщений: 3388
Регистрация: 12.3.2006
Где: Тосно

Репутация: 28
Всего: 89



ИМХО какой-то корявый у тебя алгоритм. Мне кажется, мне будет легче тебе помочь если ты русскими словами напишешь что тебе надо. Ибо разбирать что твой код делает довольно трудно.


--------------------
Воспитывая детей по своему образу и подобию, родители почему-то надеются, что они будут лучше их.
PM MAIL   Вверх
Guedda
Дата 24.11.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Была у меня такая проблема. Справился с ней следующим образом:
Код

type rec=record
     slovo:string[255];
     per:string[255];
     end;

var
  Form1: TForm1;
  sl, perevod: string;
  r: rec;
  f,g: file of rec;

procedure TForm1.Button1Click(Sender: TObject);
begin
  AssignFile(f, '1.txt');
  Reset(f);
  AssignFile(g, 'temp.tmp');
  Rewrite(g);
  while not eof(f) do begin
    Read(f, r);
    Write(g, r);
  end;
  r.slovo := Edit1.Text;
  r.per := Edit2.Text;
  Write(g, r);
  CloseFile(f);
  CloseFile(g);
  Rewrite(f);
  Reset(g);
  while not eof(g) do begin
    read(g, r);
    write(f, r);
  end;
  closefile(f);
  closefile(g);
  DeleteFile('temp.tmp');
end;


Всё работает. Только что проверял.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1161 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.