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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> кто глючит: я или Move() ?, Free Pascal
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

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


Задание: считать в строку весь файл.
При вызове Move появляются глюки. Что я делаю не так?

Примечание: размер тестируемого файла должен быть > 4096 byte
Код
uses Strings;

{tested in FPC}

Const BlockSize = 4096;
type  Buffer = array [0 .. BlockSize - 1 ] of char;
var X: Buffer;
   A: PChar;

   F: file;
   data: AnsiString;
   P: PAnsiString; //Pointer;
   fpos,cont_len,Count: longint;

   sz,cnt: word;

begin
    Assign (F, 'stest.pas');
    {$I-}
    Reset (F, 1);
    {$I+}
    if IOresult <> 0 then
       exit;
    cont_len := FileSize (F);

    SetLength (data, cont_len);
    GetMem(A,cont_len);
    if A=Nil then exit;
    A[0]:=#0;

    data:='';
    fpos:=0;
    P:=pointer(A);
    While Not Eof(F) do
    begin
         BlockRead (F, X, BlockSize,Cnt);
         writeln (Longint(P): 4, Longint(P)-Longint(A) : 8);
         move (X, P, Cnt); { копируем в строку блок Х с позиции fpos. BUG здесь }
         inc (fpos, Cnt);
         P := Pointer (@(A[fpos]));
         A[fpos] := #0;
    end;

    Close (F);
//     data := AnsiString (A);
    FreeMem (A, cont_len);
    writeln (fpos);

    readln;
end.


Сообщение отредактировано: romtek -


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Смотрю...
*****

Группа: Пользователи
Сообщений: 1 055
Пол: Мужской
Реальное имя: Пшеничный Алексей Анатольевич

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


похоже придеться ждать открытия раздела по фрии паскалю.... ;)


--------------------
Если что-то не делает того, что вы запланировали ему делать - это еще не означает, что оно бесполезно.
--------------------
Прежде, чем задать вопрос - Правила :: FAQ :: Поиск
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Я могу ошибаться, но по-моему Move(куда,что,сколько), а не Move(что,куда,сколько). А в дебугере не пробывал?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

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


Код
procedure Move (var Source, Dest; Count: longint);


разумеется, пробовал в дебаггере.


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

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

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


может все же Move(X, P^, cnt) ?

и вообще че-то не пойму, разве нельзя проще написать:

var s: AnsiString;

...
setlength(s,filesize(f));
blockread(f,pointer(s)^,filesize(f));
...

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


Знаток
****

Группа: Пользователи
Сообщений: 303
Пол: Мужской
Реальное имя: Роман

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


Тьфу, чёрт! Уже который раз спотыкаюсь об одну и ту же ошибку! angry.gif

P@sh@, спасибо ;)


--------------------
Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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