IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Как поменять две записи местами в файле?
сообщение
Сообщение #1


Гость






Имеется прога для работы с файлом. В ней все процедуры уже готовы (создать файл, открыть файл, просмотреть содержимое и т.д.) Осталось только написать процедуру, которая бы меняла две записи местами в файле. Вводиться номер первой записи и номер второй. вот что сделал я:
Код
interface
type MyRec= record
     name1 : string[39];
     name2 : string[39];
     end;
type Myfiletype = file of MyRec;


Код

procedure FChange( var fff:Myfiletype; FileOpen: boolean );
var rec:myrec;
var  a, b, i: integer;
   str1, str2, str3, str4:string;
begin
writeln (' введите номер первой записи');
{$I-}
read(i);

seek(fff,i);
{$I+}
if (ioresult=0)
then FileOpen:=TRUE
else begin
         MyFileErr:=5;
         exit;
     end;
str1:=rec.name1;
str2:=rec.name2;
writeln(' введите номер второй записи);
{$I-}
read(b);
seek(fff, b);
{$I+}
if (ioresult=0)
then FileOpen:=TRUE
else begin
         MyFileErr:=5;
         exit;
     end;
str3:=rec.name1;
str4:=rec.name2;
rec.name1:=str1;
rec.name2:=str2;
write(fff, rec);
seek(fff, i);
rec.name1:=str3;
rec.name2:=str4;
write(fff, rec);

end;

В итоге у меня получается билиберда sad.gif Помогите разобраться пожалуйста.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ну, зачем же так? Можно проще...
procedure FChange(var f: Myfiletype; FileOpen: boolean);
var
r1, r2:myrec;
a, b: integer;
begin
writeln (' введите номер первой записи');
read( a ); { номер первой записи }
{$i-} seek( f, a ); {$i+}
if (ioresult=0) then FileOpen:=TRUE
else begin
MyFileErr:=5; exit;
end;
read(f, rec1); { читаем 1 запись }

writeln (' введите номер второй записи');
read( b ); { номер второй записи }
{$i-} seek( f, B ); {$i+}
if (ioresult=0) then FileOpen:=TRUE
else begin
MyFileErr:=5; exit;
end;
read(f, rec2); { читаем 2 запись }

{ и меняем местами ... }
seek( f, a ); write(f, rec2);
seek( f, B ); write(f, rec1);
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Большое спасибо volvo! Действительно, всё оказалось намного проще, а я голову ломал. Просто ещё не совсем освоился с работой с файлами и записями. А ведь скоро курсовую писать. Эхх... sad.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.05.2024 9:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name