На вход подается текстовый файл. Суть: находим определенную строчку в файле, в ней находим нужное число и (после преобразования) выводим в текстовый файл. Проблема: В не зависимости от размера входного файла, на выходе не более 64 кбайт. Как я понимаю 64- макс размер буфера. Ошибки нигде не вижу. Посмотрите пожалуйста
- Код: Выделить всё
- uses crt;
 var
 latitude, longitude, PDOP, VDOP, HDOP : real;
 buflen, i,j, commas, commapos, k, m, next_comma : integer;
 buf, status : string;
 output, vspom : string;
 first, second : real;
 f1, f2 : text;
 begin
 clrscr;
 writeln('Enter filename to read'); {Запрос на ввод имени исходного лог-файла}
 readln(buf); {Читаем имя файла с клавиатуры}
 assign(f1, buf); {Связываем имя файла с файловым указателем f1}
 reset(f1); {Открываем файл для чтения}
 writeln('Enter output filename'); {Запрос на ввод имени выходного файла}
 readln(buf); {Читаем имя файла с клавиатуры}
 assign(f2, buf); {Связываем имя файла с файловым указателем f2}
 rewrite(f2); {Создаем файл на диске и открываем его для записи}
 {Цикл пока не достигнут конец файла или не нажата любая клавиша}
 while (not eof(f1)) and (not keypressed) do
 begin
 readln(f1,buf); {Читаем очередную строку из лог-файла}
 buflen := length (buf); {Запоминаем длину считанной строки}
 {Если в строке buf есть подстрока с символами RMC, то ...}
 if pos('RMC', buf) <> 0 then
 {******************************************************************************}
 {************************Анализ предложения RMC********************************}
 {******************************************************************************}
 begin
 {writeln(f2,buf);}
 commas := 0;
 commapos := 0;
 for i:=1 to buflen do {Проверка всех символов в буфере}
 begin
 if buf[i] = ',' then {Если встретилась запятая, то ...}
 begin
 {запоминаем общее количество найденных запятых в строке buf}
 inc (commas);
 {запоминаем позицию, где встретилась очередная запятая}
 commapos := i;
 {если количество запятых равно 3 и поле после запятой не пустое, то там содержится информация о широте}
 if (commas = 3) and (buf[commapos + 1] <> ',') then
 begin
 {Вычисляем позицию следующей запятой}
 next_comma := commapos + 1;
 while buf[next_comma] <> ',' do inc(next_comma); {Цикл, пока не встретится следующая запятая}
 output := buf; {копируем содержимое строки buf в строку output}
 {удаляем из строки output всю лишнюю информацию, кроме широты}
 delete(output,next_comma,buflen);
 delete(output,1,commapos);
 {удаляем в строке output поля, отведенные для записи}
 {целого числа градусов, чтобы вычислить минуты}
 delete(output,1,2);
 {преобразуем строку output в число second}
 val (output, second, m);
 {переводим минуты в градусы}
 second := second/60.0;
 output := buf; {снова копируем содержимое строки buf в строку output}
 {удаляем из строки output всю лишнюю информацию, кроме широты}
 delete(output,next_comma,buflen);
 delete(output,1,commapos);
 {удаляем в строке output поля, отведенные для}
 {записи минут, чтобы вычислить целое число градусов}
 delete(output, 3, buflen);
 {Преобразуем строку output в число first}
 val(output, first,m); {число first - целая часть градусов}
 {складываем целую часть градусов с минутами,}
 {переведенными в градусы и получаем значение широты}
 latitude := first + second;
 write(f2,latitude:2:10,' '); {выводим значение широты в файл}
 end;
 {если количество запятых равно 5 и поле после запятой не пустое, то там содержится информация о долготе}
 if (commas = 5) and (buf[commapos + 1] <> ',') then
 begin
 {Вычисляем позицию следующей запятой}
 next_comma := commapos + 1;
 while buf[next_comma] <> ',' do inc(next_comma); {Цикл, пока не встретится следующая запятая}
 output := buf; {копируем содержимое строки buf в строку output,}
 {удаляем из строки output всю лишнюю информацию, кроме долготы}
 delete(output,next_comma,buflen);
 delete(output,1,commapos);
 {удаляем в строке output поля, отведенные для записи}
 {целого числа градусов, чтобы вычислить минуты}
 delete(output,1,3);
 {преобразуем строку output в число second}
 val (output, second, m);
 {переводим минуты в градусы}
 second := second/60.0;
 output := buf; {снова копируем содержимое строки buf в строку output}
 {удаляем из строки output всю лишнюю информацию, кроме долготы}
 delete(output,next_comma,buflen);
 delete(output,1,commapos);
 {удаляем в строке output поля, отведенные для}
 {записи минут, чтобы вычислить целое число градусов}
 delete(output, 4, buflen);
 {Преобразуем строку output в число first}
 val(output, first,m); {число first - целая часть градусов}
 {складываем целую часть градусов с минутами,}
 {переведенными в градусы и получаем значение долготы}
 longitude := first + second;
 write(f2,longitude:2:10,' '); {Выводим в файл}
 end;
 end;
 end;
 writeln(f2); {Перевод строки в файле}
 end;
 end;
 close(f1);
 close(f2);
 end.



