Всем привет! В данный момент пытаюсь реализовать следующую задачу: нужно в текстовом файле (кол-во) В строк с позиции(строка) А поменять местами с В строками позиции(строки) С, то есть какбы переставить их местами. А,В,С вводятся с клавиатуры. Вот мои наработки:
programm perstr; var a,b,c,j :integer; f,newf: text; st:string;
procedure jmp(x: integer); var i: integer; s: string; begin for i:=1 to x-1 do readln(f1,s); end;
for j:=1 to b-1 do begin readln(f,st); writeln(newf,st); end;
close(f); reset(f); jmp(a+b);
for j:=1 to c-a-b do begin readln(f,st); writeln(newf,st); end;
close(f); reset(f); jmp(a);
for j:=1 to b do begin readln(f,st); writeln(newf,st); end;
close(f); close(newf);
end.
Есть сообщение об ошибке: отсутствует begin. Скажу честно, pascal подзабыл. Какие будут замечание, предложения по реализации? Как довести это до ума?
volvo
23.09.2009 16:03
Цитата
Есть сообщение об ошибке: отсутствует begin.
Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть).
Rocket
23.09.2009 17:59
Цитата(volvo @ 23.09.2009 13:03)
Нет слова Programm в Паскале, поэтому компилятор тебя и не понимает... Убери лишнюю букву и исправляй ошибки дальше (у тебя там еще неописанные переменные есть).
Угу, все исправил и дописал, - работает:
program perstr; var a,b,c,j :integer; f,newf: text; st:string;
procedure jmp(x: integer); var i: integer; s: string; begin for i:=1 to x-1 do readln(f,s); end;
for j:=1 to b do begin readln(f,st); writeln(newf,st); end;
close(f); reset(f); jmp(a+b);
for j:=1 to c-a-b do begin readln(f,st); writeln(newf,st); end;
close(f); reset(f); jmp(a);
for j:=1 to b do begin readln(f,st); writeln(newf,st); end;
close(f); reset(f); jmp(c+b);
while not eof(f) do begin readln(f,st); writeln(newf,st); end;
close(f); close(newf);
end.
Но, когда я написал отдельную процедуру для записи в новый файл, программа стала работать некорректно. Исходный файл: aaa bbb ccc ddd fff hhh jjj kkk lll xxx yyy zzz
while not eof(f) do begin readln(f,st); writeln(newf,st); end;
close(f); close(newf); end.
Как исправить?
volvo
23.09.2009 18:12
Цитата
Как исправить?
Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa fff hhh ddd bbb ccc jjj kkk lll xxx yyy zzz
, то есть, как и запрашивалось...
Rocket
23.09.2009 19:50
Цитата(volvo @ 23.09.2009 15:12)
Не понял... У меня после прогона программы (с твоим файлом) файл YY.TXT принял вот такой вид:
aaa fff hhh ddd bbb ccc jjj kkk lll xxx yyy zzz
, то есть, как и запрашивалось...
Вы запускали program code , верно?
volvo
23.09.2009 20:18
Да, именно его.
Rocket
23.09.2009 20:34
Цитата(volvo @ 23.09.2009 17:18)
Да, именно его.
Хм... а у меня упорно YY.txt принимает вид:
Цитата
aaa hhh ddd ccc jjj kkk lll xxx yyy zzz
Чертовщина?!
volvo
23.09.2009 20:38
Скорее, влияет то, что я компилирую FPC 2.2.0... Турбо Паскаль мне пока недоступен.
Lapp
24.09.2009 9:18
Цитата(volvo @ 23.09.2009 17:38)
Скорее, влияет то, ...
Явно повлияло то, что в процедуре Work оператор WriteLn выпал из цикла.. Rocket, учись делать правильные отступы, иначе намучишься с такими проблемами. И других намучишь, потому что крыша едет, когда такое смотришь - воистину:
Цитата(Rocket @ 23.09.2009 17:34)
Чертовщина?!
Но стоит отформатировать - и сразу все становится ясно)).
Lapp
24.09.2009 10:12
Еще пара замечаний: 1. Не нужно делать Close перед Reset. 2. Для пропуска строки не нужен параметр: ReadLn(f). Соответственно, пропадает надобность в переменной s в процедуре Jmp (которую лучше назвать Jump все же)).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.