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

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

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

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





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

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


помогите плиз откомпилировать прогу! я торможу, а завтра сдавать...мне fpc выдает ошибки на немовпадение типов данных в процах blockread и blockwrite. по сути последняя переменная в скобках должна быть типа word, но у меня работа со строками, и я не знаю что делать... sad.gif

uses crt;

const
delimiters=[' ','.',',',';','!','?',':','*','#','$','(',')','[',']'];

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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






А что ты хочешь делать в этих самых BlockRead/BlockWrite? Задумка у тебя какая? Читать в arrBuf, или в строку? Зачем в функцию передается строка - непонятно... Само задание приведи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Цитата(volvo @ 21.12.2008 18:15) *

А что ты хочешь делать в этих самых BlockRead/BlockWrite? Задумка у тебя какая? Читать в arrBuf, или в строку? Зачем в функцию передается строка - непонятно... Само задание приведи...

нужно удалить из строки повторяющиеся слова, притом чтение строки должно происходить из файла, и запись результата тоже в файл. я сперва выделяю слово, затем я записываю слова в массив строк и удаляю повторы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Смотри, если ты делаешь это на 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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


спасибо огромное, выручил smile.gif только вот не оч понятно что такое move...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Цитата
не оч понятно что такое move...
move - это стандартная Паскалевская процедура, предназначенная для пересылки данных. Первый параметр - источник, второй - приемник, третий - размер в байтах...

Кстати, совсем забыл... Чтобы то, что я написал, работало корректно, нужно
case Direction of
ReadFile: Reset(F, 1); // Открывать файл с длиной блока данных = 1 байту, иначе будут проблемы
WriteFile: ReWrite(F, 1);
end;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7





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

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


спасибо, просветил smile.gif и еще раз спасибо!! smile.gif

Сообщение отредактировано: hellspawn -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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