www.boolean.name

www.boolean.name (http://forum.boolean.name/index.php)
-   FAQ (http://forum.boolean.name/forumdisplay.php?f=48)
-   -   Непонятки с чтением строк из файла (http://forum.boolean.name/showthread.php?t=4367)

odd 07.09.2007 04:17

Непонятки с чтением строк из файла
 
У меня не получается корректно отлавливать конец файла при чтении строк. В инструкции к MD сказано, что если конец файла достигнут, то оператор ReadLine возвращает пустую строку. Вот примерно как я делаю:

Код:


res := OpenResource(fname);
if ResourceAvailable(res) then
begin
repeat
      line := ReadLine(res);
      if line='' then break;  // Отлавливаем конец файла
 
                              // Тут что-то делаем со строками
 
until (FALSE);
end;
CloseResource(res);

Но данный код не работает. При чтении программа зависает.
Приходится в файл вконце писать признак конца файла, например символ # и строку выхода заменить на if line = '#' then break; тогда всё замечательно работает. Я тут не пойму это глюк MD или я что-то не так делаю. Просветите меня как правильно определять конец файла.

Piligrim 07.09.2007 09:38

Re: Непонятки с чтением строк из файла
 
это глюк МР :( все так делают.

odd 08.09.2007 03:55

Re: Непонятки с чтением строк из файла
 
Понятно. Спасибо.

Gipsy 27.06.2008 18:57

Ответ: Непонятки с чтением строк из файла
 
Подскажите чайнику, как с кодировками бороться? А то совсем не читает кирилицу из ресурса :(
Зы: Спасиб про инфо про ЕОФ, а то я так и не понял по какой причине висит.

ViNT 27.06.2008 19:42

Ответ: Непонятки с чтением строк из файла
 
Цитата:

Сообщение от Gipsy (Сообщение 81505)
Подскажите чайнику, как с кодировками бороться? А то совсем не читает кирилицу из ресурса :(

Вообще нужна кодировка UTF-8.

Frank 27.06.2008 21:45

Ответ: Непонятки с чтением строк из файла
 
Цитата:

Сообщение от Gipsy (Сообщение 81505)
Подскажите чайнику, как с кодировками бороться?

Для борьбы с кодировкой юзай этот код:
Код:

Function StrToUtf8(s: string;): string; // Корректирует русскую кодировку в строках взятых из ресурсов...
var i, c: integer; ch: char; ss: string;
begin
        if (pos(s,chr(65488))<>-1) or (pos(s,chr(65489))<>-1) then begin // если строка содержит русские симовлы, то
                for i:=1 to Length(s) do begin // перебираем строку
                        ch:=GetChar(s,i-1); c:=ord(ch);        // берем по байтику
                        if c=65488 then begin                                // если байт равен 65488, то следующий байт отвечает за русскую букву
                                ss:=ss+CHR(ord(GetChar(s,i))-64384);        // находим русскую букву и запоминаем
                                i:=i+1;                                                                                                                                // это чтобы мы перешли на следующую букву, а не брали следующий байт
                        end
                        else begin
                                if c=65489 then begin                                                // то же самое но с другим байт-кодом
                                        ss:=ss+chr(ord(GetChar(s,i))-64320);
                                        i:=i+1;
                                end
                                else ss:=ss+ch;                                                                                // если это не русская буква, то просто ее добавим
                        end;
                end;
                StrToUtf8:=ss;                                                        // возвращаем откорректированный текст
        end
        else StrToUtf8:=s;                        // если строка не содержала русских букв, то просто ее и возвратим...
end;


Romanzes 29.07.2008 12:52

Ответ: Непонятки с чтением строк из файла
 
Как сделать, чтобы можно было читать не только кириллицу, но и такие буквы как: ї, љ, њ, ќ? Вообще эти символы относятся к кириллическим, но если использовать приведенную выше функцию StrToUtf8, то прога все равно зависает.

PS: Да, мне это нужно.


Часовой пояс GMT +1, время: 00:14.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot