помогите плиз откомпилировать прогу! я торможу, а завтра сдавать...мне fpc выдает ошибки на немовпадение типов данных в процах blockread и blockwrite. по сути последняя переменная в скобках должна быть типа word, но у меня работа со строками, и я не знаю что делать...
type TDirections=(ReadFile,WriteFile); ArrString=array [1..10] of string; ArrBuf=array [1..1024] of byte;
function OpenNonTypicalFile (buf: ArrBuf; var F: file; FileName: string; Direction: TDirections): boolean; var Result: boolean; begin assign(F,FileName); Result:=True; case Direction of ReadFile: Reset(F,sizeof(F)); WriteFile: ReWrite(F,sizeof(F)); end; if IOResult<>0 then begin case Direction of ReadFile: writeln('Failed to read file '+FileName); WriteFile: writeln('Failed to write file '+FileName); end; Result:=False; end; OpenNonTypicalFile:=Result; end;
function ReadNonTypicalFile (buf: ArrBuf; var F: file; d: string): string; begin while not eof(F) do begin BlockRead(F,buf,sizeof(d),d); end; ReadNonTypicalFile:=d; end;
function FirstIndex (s: string; var i: byte): byte; begin while (s[i] in delimiters) do inc(i); FirstIndex:=i; end;
function LastIndex (s: string; i: byte): byte; begin while not(s[i] in delimiters) do inc(i); LastIndex:=i-1; end;
function GetWord (s: string; b,e: byte): string; begin GetWord:=copy(s,b,e-b+1); end;
var i, j, s, FI, LI, l, wordbeg, iel: byte; line, el: string; a: ArrString; buf: ArrBuf; F: file;
begin clrscr;
if OpenNonTypicalFile(buf,F,'111.dat',ReadFile) then line:=ReadNonTypicalFile(buf,F,el);
wordbeg:=1; i:=1; s:=0; begin l:=length(line); while wordbeg<l+1 do begin FI:=FirstIndex(line,wordbeg); LI:=LastIndex(line,FI); writeln(GetWord(line,FI,LI)); a[i]:=GetWord(line,FI,LI); inc(i); s:=s+1; wordbeg:=LI+1; end; end;
if OpenNonTypicalFile(buf,F,'112.dat',WriteFile) then for i:=1 to s do begin el:=a[i]; iel:=i; for j:=1 to s do if (a[j]=el) and (not(j=iel)) then a[j]:=''; end;
for i:=1 to s do BlockWrite(F,buf,sizeof(a[i]),a[i]);
close(F);
end.
volvo
21.12.2008 22:15
А что ты хочешь делать в этих самых BlockRead/BlockWrite? Задумка у тебя какая? Читать в arrBuf, или в строку? Зачем в функцию передается строка - непонятно... Само задание приведи...
hellspawn
21.12.2008 22:44
Цитата(volvo @ 21.12.2008 18:15)
А что ты хочешь делать в этих самых BlockRead/BlockWrite? Задумка у тебя какая? Читать в arrBuf, или в строку? Зачем в функцию передается строка - непонятно... Само задание приведи...
нужно удалить из строки повторяющиеся слова, притом чтение строки должно происходить из файла, и запись результата тоже в файл. я сперва выделяю слово, затем я записываю слова в массив строк и удаляю повторы.
volvo
21.12.2008 23:26
Смотри, если ты делаешь это на FPC, то читать всю строку из файла можно так:
function ReadNonTypicalFile(var F: file): string; var buf: ArrBuf; wasread: word; begin BlockRead(F, buf, sizeof(buf), wasread); move(buf, ReadNonTypicalFile[1], wasread); end;
, тогда процесс чтения/записи будет выглядеть:
begin clrscr; if OpenNonTypicalFile(buf,F,'111.dat',ReadFile) then begin line:=ReadNonTypicalFile(F); close(F); // закрываем файл ... end;
// ... // тут - сам процесс обработки строки ... Вот с ним у тебя проблема, // что-то некорректно делается, проверь ...
// И после обработки - открытие файла для записи: // Зачем передаешь buf - непонятно, лучше убери... if OpenNonTypicalFile(buf, F, '112.dat', WriteFile) then { ... удаление дубликатов }
for i:=1 to s do blockwrite(f, a[i][1], length(a[i]));
close(F); end.
hellspawn
21.12.2008 23:45
спасибо огромное, выручил только вот не оч понятно что такое move...
volvo
21.12.2008 23:51
Цитата
не оч понятно что такое move...
move - это стандартная Паскалевская процедура, предназначенная для пересылки данных. Первый параметр - источник, второй - приемник, третий - размер в байтах...
Кстати, совсем забыл... Чтобы то, что я написал, работало корректно, нужно
case Direction of ReadFile: Reset(F, 1); // Открывать файл с длиной блока данных = 1 байту, иначе будут проблемы WriteFile: ReWrite(F, 1); end;
hellspawn
21.12.2008 23:56
спасибо, просветил и еще раз спасибо!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.