Доброго времени суток! При переводе исходника си/си ++ на ламповый pascal возникла такая проблема: Код (Text): void ShowMessage(char *s) { MessageBox(0, s, "", 0); } // long long words, size; f = fopen('test.txt', "rb"); if (f == NULL) { return -1; } fscanf(f, "%lld", &words); fscanf(f, "%lld", &size); //printf("%lld %lld", words, size); выдает то же самое wsprintfA(str, "words: %d", words); ShowMessage(str); wsprintfA(str, "size: %d", size); ShowMessage(str); Выдает значения 163, 200. Код (Text): var hFile: dword; words, size: LongInt; begin hFile := FileOpen('test.txt', fmOpenRead); if (hFile = -1) then Exit; FileSeek(hFile, 0, 0); FileRead(hFile, words, SizeOf(words)); ShowMessage(IntToStr(words)); FileRead(hFile, size, SizeOf(size)); ShowMessage(IntToStr(size)); FileClose(hFile); Выдает значения 540227121, 170930226. Файл один и тот же. Что я делаю не так? Пробывал менять тип переменных, во втором исходнике: words, size: LongInt; //words, size: word; //words, size: Int64; Код (Text): fscanf(f, "%lld", &words); fscanf(f, "%lld", &size); Скорее всего все дело в этой части. Как сделать, чтобы в обоих случаях работало одинаково? =/
Эмм, ну так fscanf читает инт из строки, а FileRead очевидно читает байты, не знаю, как в этом вашем Паскале это делается, но тебе нужно считать файл, как строку, потом оттуда достать две строки с числами (разбить по пробелам, или что там), потом преобразовывать каждую из них в инты, или что там тебе надо с ними делать).
На ламповом паскале аналоги scanf/printf это Read/Write и сопутствующие файловые функции: Код (Text): Program Example50; { Program to demonstrate the Read(Ln) function. } Var S : String; C : Char; F : File of char; begin Assign (F,'ex50.pp'); Reset (F); C:='A'; Writeln ('The characters before the first space in ex50.pp are : '); While not Eof(f) and (C<>' ') do Begin Read (F,C); Write (C); end; Writeln; Close (F); Writeln ('Type some words. An empty line ends the program.'); repeat Readln (S); until S=''; end.
Спасибо, получилось! Код (Text): f: file of char; ... Assign(F, 'test.txt'); Reset(F); s1 := ''; token_counter := 0; while not Eof(f) do begin Read (F, c_buf); if (c_buf = ' ') or (c_buf = #10) then begin if token_counter = 0 then begin ShowMessage(s1); end; if token_counter = 1 then begin ShowMessage(s1); end; token_counter := token_counter + 1; if token_counter >= 2 then Break; s1 := ''; end else begin s1 := s1 + c_buf; end; end;