forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   чо за?... (http://forum.boolean.name/showthread.php?t=7765)

beZ_probleM 03.02.2009 22:53

чо за?...
 
блин у меня мозги уже плавлятсо от кодинга)):crazy:
:) подскажыте почему не работает :

PHP код:

procedure read_(k:string);
var 
res:resource;
    
g:string;
    
i:integer;
begin
res
:=openresource(k);
if (
resourceAvailable(res)) then 
   begin
     g
:=readline(res);
     
repeat
       
if (g='1') or (g='2') or (g='3') or (g='4'then
          begin
            i
:=stringtointeger(g);
          
end
       
else
          
begin
            para
[i].nazva:=g;
            
para[i].prepod:=readline(res);
            
para[i].aud:=readline(res);
          
end;
      
g:=readline(res);
     
until g='#';
   
end;
CloseResource(res); 
end

Пример содержымого файла :
Цитата:

1
Лек. Об’єктивно–орієнтовне програмування
Лісовець
Аудиторія:1-0413
2
Лек. Релігієзнавство
Множинська Р.В.
Аудиторія:4-0505
#
проблема 1оо% не в имени файла а в считывании с файла...

temned 03.02.2009 23:09

Ответ: чо за?...
 
Может с кодироовкой что?

beZ_probleM 03.02.2009 23:50

Ответ: чо за?...
 
наверно со шрифтом... а в какой кодировке нужно сохранять чтоб можно было читать русские буквы из этого .txt-файла?

у меня есть пример обработки русских символов... но я непомню для какой ето кодировки, тоесть какая кодировка должна быть в файле :
PHP код:

Function StrToUtf8(sstring;): string// Корректирует русскую кодировку в строках взятых из ресурсов...
var icintegerchcharssstring;
begin
    
if (pos(s,chr(65488))<>-1) or (pos(s,chr(65489))<>-1then 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


temned 04.02.2009 01:37

Ответ: чо за?...
 
кинь исходник

beZ_probleM 04.02.2009 02:40

Ответ: чо за?...
 
Цитата:

Сообщение от TEMNED (Сообщение 96828)
кинь исходник

:4to: а что по твоему я бросал ещё в самом начале?

Banan 04.02.2009 09:14

Ответ: чо за?...
 
Попробуй в файле после знака # оставить пустую строку. У меня при похожей ситеме как раз из за этого зависало.

VM 04.02.2009 10:10

Re: чо за?...
 
Обычно в конце файла пишу:
eof
---
В цикле until g = 'eof';
Всё работает...

Piligrim 04.02.2009 12:38

Ответ: чо за?...
 
все дело в том, что строка с "#" или с "eof" тоже должна заканчиваться переводом строки

VM 04.02.2009 15:23

Re: Ответ: чо за?...
 
Цитата:

Сообщение от pilgrim (Сообщение 96846)
все дело в том, что строка с "#" или с "eof" тоже должна заканчиваться переводом строки

Все правильно, я это имел ввиду, когда написал:
eof
--- << Это обязательная строка, т.к. просто перевод строки, после которого нет текста, некоторые текстовые редакторы удаляют автоматом.

beZ_probleM 04.02.2009 16:38

Ответ: чо за?...
 
кароче проблема не в той строке на которую заканчивается файл а в том что оно читать не хочет файл когда я сохраняю его в кодировке Юникод(UTF-8 )

когда же сохраняю в обычной кодировке блокнота то оно читает нормально, токо вместо русского текста "ИЕРОГЛИФЫ" какието пишет...

вобщем проблема в кодировке я так понял...
и странно что функция StrToUtf8,которую я выложыл выше, не спасает...

temned 04.02.2009 16:43

Ответ: чо за?...
 
Код:

Program read;
const
voprosy = 20;
var
v,po,o1,o2,o3: array[1..voprosy] of string;
c: integer;



procedure read(t: string);
var
res : resource;
byte,c,c1: integer;
line,a1,a2 : string;
f: boolean;

begin
res := openResource(t);
if (resourceAvailable(res)) then begin
a1:='АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
a2:='абвгдежзийклмнопрстуфхцчшщъыьэюя';

for c:=1 to voprosy do begin
line:='';
repeat begin
byte := readByte(res); f:=true;
if byte<> 13 then begin
for c1:=0 to 32 do begin
if byte=(-64+c1) then begin line:=line+copy(a1,c1,c1+1);f:=false;break;end;
if byte=(-32+c1) then begin line:=line+copy(a2,c1,c1+1);f:=false;break;end;
end;

if byte=(-88) then begin line:=line+'Ё';f:=false;end;
if byte=(-72) then begin line:=line+'ё';f:=false;end;
if f then line:=line+chr(byte);

end;end; until byte = 13;
byte := readByte(res);
o3[c]:=line;
end;
closeResource(res);
end; end;

begin
read ('/v.txt'); for c:=1 to voprosy do v[c]:=o3[c];
read ('/po.txt'); for c:=1 to voprosy do po[c]:=o3[c];
read ('/o1.txt'); for c:=1 to voprosy do o1[c]:=o3[c];
read ('/o2.txt'); for c:=1 to voprosy do o2[c]:=o3[c];
read ('/o3.txt');
end.

это задумка одного парня-чтение русских строк из

beZ_probleM 04.02.2009 17:16

Ответ: чо за?...
 
без описания сложно розобратсо... мож из этого написать функцию которайа бы в свой результат передавала строку с нормальными символами в кодировке для вывода на дисплей мобильного?
или хоть коменты напишы что где означает... ато я ток понял шо строки мы сохраняем в массив...
вобщем понятно то что ничего не понятно)

temned 04.02.2009 17:29

Ответ: чо за?...
 
Хорошо. вечером зайду в сеть, попытаюсь че-нить сделать. просто сясь на миниопера. ЕСЛИ ТЕ НЕ трудно скинь твой текст уже в нужной кодировке. Попробую разобраться вечером, самому стало интересно.

beZ_probleM 04.02.2009 17:38

Ответ: чо за?...
 
текст я уже приводил какой должен быть в файле а кодировка Юникод(UTF-8 ) это 1оо%

GRAY_WOLF 04.02.2009 18:38

Ответ: чо за?...
 
Цитата:

Сообщение от beZ_probleM (Сообщение 96858)
текст я уже приводил какой должен быть в файле а кодировка Юникод(UTF-8 ) это 1оо%

Погляди здесь http://forum.boolean.name/showthread.php?t=7592
пример выложен - там перекодировка из win1251 > utf8 поиск в ресурсном файле и вывод на дисплей со скролингом.


Часовой пояс GMT +4, время: 17:43.

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