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

> Прочтите прежде чем задавать вопрос!

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

 
 Ответить  Открыть новую тему 
> не тот результат записывается в файл, нужно поменять 2 строчки местами
Lurid
сообщение 11.04.2007 16:46
Сообщение #1





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

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


получаю ошибку - Error 105: File not open for output.

 
Program ch;
Var
f1, f2: text; a,n: byte; count: integer; stroka, stroka1, stroka2: string;
begin
a:=2;
n:=4;
assign (f1, 'file1.txt');
assign (f2, 'file2.txt');
reset (f1);
rewrite (f2);
count:=0;
while not eof (f1) do begin
readln (f1, stroka);
if count=a then
writeln (f2, stroka1);
if count=n then
writeln (f2, stroka2);
count:= count+1;
end;
begin
reset (f2);
rewrite (f1);
count:=1;
if count=a then
readln (f2, stroka2);
writeln (f2, stroka);
if count=a then
readln (f2, stroka1);
writeln (f2, stroka);
count:= count+1;
end;
close (f1);
close (f2);
erase (f2);
end.





Сообщение отредактировано: Lurid - 11.04.2007 19:39
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.04.2007 16:52
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


 
reset (f2);
// ...
writeln (f2, stroka);



ты переоткрыл файл для чтения, а пытаешь в него писать ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lurid
сообщение 11.04.2007 17:40
Сообщение #3





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

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


Цитата(klem4 @ 11.04.2007 17:52) *

 
reset (f2);
// ...
writeln (f2, stroka);



ты переоткрыл файл для чтения, а пытаешь в него писать ...


А как надо? я дома изучаю язык. по учебнику. Поэтому если не трудно то где править?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 11.04.2007 18:21
Сообщение #4


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


может, задание расскажешь? или это тайна?

текстовый файл можно открыть или для записи, или для чтения. делать и то, и другое одновременно не получится.
readln (f2, stroka2);
writeln (f2, stroka);

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lurid
сообщение 11.04.2007 18:59
Сообщение #5





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

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


Цитата(мисс_граффити @ 11.04.2007 19:21) *

может, задание расскажешь? или это тайна?

текстовый файл можно открыть или для записи, или для чтения. делать и то, и другое одновременно не получится.
readln (f2, stroka2);
writeln (f2, stroka);

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


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


Program ch;
Var
f1, f2: text; a,n: byte; count: integer; stroka, stroka1, stroka2: string;
begin
a:=2;
n:=4;
assign (f1, ‘file1.txt’);
assign (f2, ‘file2.txt’);
reset (f1);
rewrite (f2);
count:=0;
while not eof (f1) do begin
readln (f1, stroka);
if count=a then
writeln (f2, stroka1);
if count=n then

writeln (f2, stroka2);
count:= count+1;
end;
begin
reset (f2);
rewrite (f1);
count:=1;
if count=a then
readln (f2, stroka2);
writeln (f1, stroka);
if count=a then
readln (f2, stroka1);
writeln (f1, stroka);
count:= count+1;
end;
close (f1);
close (f2);
erase (f2);
end.



то есть если в файле написано
1
2
3
4
5

должно получится:
1
4
3
2
5

Сообщение отредактировано: Lurid - 11.04.2007 19:00
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lurid
сообщение 11.04.2007 19:34
Сообщение #6





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

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


у меня получается?
если было
1
2

то получается
2
2

где я не то пишу?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.04.2007 19:46
Сообщение #7


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата
Вообще задание: в тесктовом файле поменять местами 2 строки с заданными номерами


В решении обязательно использовать дополнительный файл ?


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lurid
сообщение 11.04.2007 19:54
Сообщение #8





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

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


Цитата(klem4 @ 11.04.2007 20:46) *

В решении обязательно использовать дополнительный файл ?

да. обязательное условие

Сообщение отредактировано: Lurid - 11.04.2007 19:56
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 11.04.2007 20:20
Сообщение #9


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Что-то вроде этого, но думаю можно это делоа сократить. Причем серьезно.

var
f1, f2: Text;
s, first: String;
n, m, count: Integer;

begin

n := 2;
m := 3;

if n <> m then begin

assign(f1, 'text.txt'); reset(f1);
assign(f2, 'temp.txt'); rewrite(f2);

count := 0;

while not(eof(f1)) and (count < n - 1) do begin
readln(f1, s); inc(count);
writeln(f2, s);
end;

readln(f1, first);

reset(f1); count := 0;

while not(eof(f1)) and (count <> m) do begin
inc(count);
readln(f1, s);
end;

writeln(f2, s);

reset(f1); count := 0;

while not(eof(f1)) do begin
readln(f1, s); inc(count);
if count = m then writeln(f2, first) else
if count > n then writeln(f2, s);
end;

close(f1); close(f2);
rename(f1, 'to_delete.txt');
rename(f2, 'text.txt');
erase(f1);
end;

end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lurid
сообщение 11.04.2007 20:35
Сообщение #10





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

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


klem4, спасибо!!!!!!!!
Большое спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 20.09.2024 15:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"