помогите плиз откомпилировать прогу! я торможу, а завтра сдавать...мне fpc выдает ошибки на немовпадение типов данных в процах blockread и blockwrite. по сути последняя переменная в скобках должна быть типа word, но у меня работа со строками, и я не знаю что делать...
uses crt;
const
delimiters=[' ','.',',',';','!','?',':','*','#','$','(',')','[',']'];
type
TDirections=(ReadFile,WriteFile);
ArrString=array [1..10] ofstring;
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<>0thenbegincase 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;
beginwhilenot eof(F) dobegin
BlockRead(F,buf,sizeof(d),d);
end;
ReadNonTypicalFile:=d;
end;
function FirstIndex (s: string; var i: byte): byte;
beginwhile (s[i] in delimiters) do
inc(i);
FirstIndex:=i;
end;
function LastIndex (s: string; i: byte): byte;
beginwhilenot(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+1dobegin
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) thenfor i:=1to s dobegin
el:=a[i];
iel:=i;
for j:=1to s doif (a[j]=el) and (not(j=iel)) then
a[j]:='';
end;
for i:=1to 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) thenbegin
line:=ReadNonTypicalFile(F);
close(F); // закрываем файл ...
end;
// ...
// тут - сам процесс обработки строки ... Вот с ним у тебя проблема,
// что-то некорректно делается, проверь ...
// И после обработки - открытие файла для записи:
// Зачем передаешь buf - непонятно, лучше убери...
if OpenNonTypicalFile(buf, F, '112.dat', WriteFile) then{ ... удаление дубликатов }for i:=1to 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
спасибо, просветил и еще раз спасибо!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.