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

 



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