forum.boolean.name

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

Aziz 20.08.2008 22:20

чтение ресурса TXT
 
:SOS: :SOS: :SOS:
мобильный переводчик

Цитата:

var okCommand:command;
iru:integer;
ru, en:string;

okCommand:= createCommand('OK', CM_OK, 1);// Создание формы
showForm; addCommand(okCommand);
iru:= formAddTextField('Введите слово на русском', '', 20, TF_ANY);

while (getClickedCommand <> okCommand) do delay(100);
ru:=formGetText(iru);

это ввод в форму слова на русском
а в ресурсном файле например следующие строчки

Цитата:

ru:=я; en:=i;
ru:=ты; en:=you;
ru:=da; en:=yes;
......
ru:=дом; en:=home;
или такие строки (я не знаю как удобнее)

Цитата:

if ru:='я' then en:='i';
if ru:='ты' then en:='you';
......
if ru:='дом' then en:='home';
как сделать чтоб при вводе в форму слова например ДОМ
программа открывала ресурсный файл и искала строку с переводом, т.е HOME, чтобы можно было вывести его в конвайсе

Цитата:

clearForm;
showCanvas; // Растр

setColor(255,0,0); drawText(ku,10,30);
:SOS: :SOS: :SOS:

ViNT 21.08.2008 01:49

Ответ: чтение ресурса TXT
 
Ну, например, ресурсный файл типа
Код:

HOME
ДОМ
...
...
#
#

А поиск тогда как-то так:
PHP код:

var
 
word:string;
 
en:string;
 
rus:string;
 
found:boolean;
begin
 
 word
:=...//Вводим слово
 
repeat
  en
:=readLine(res);//Читаем английское слово
  
rus:=readLine(res);//Читаем его перевод
  
if UpCase(word)=en then
  begin
   word
:=rus;
   
found:=True;
  
end;
 
until (en='#')or(found);
 
//В переменной word будет перевод, или английское слово, если перевод не найден 


odd 21.08.2008 08:07

Ответ: чтение ресурса TXT
 
1. Во первых UpCase не пашет для русских букв.
2. А перекодировку из Win-1251 в UTF-8 кто будет делать?

Поиск русского текста в ресурсе действительно дело проблематичное. При неумелом подходе можно много времени тратить попусту.

ViNT 21.08.2008 11:54

Ответ: чтение ресурса TXT
 
Ну, если делать только англо-русский перевод, то применять UpCase для русских слов не потребуется =).
Ну а перекодировку я не писал потому, что просто показывал принцип поиска, а не рабочую программу.

Aziz 21.08.2008 18:05

Re: чтение ресурса TXT
 
Народ! А что тогда в замен для UpCase?

ViNT большое спасибо! Но твой код допускает баги ( и даже без COLOR="DarkOrange"]UpCase[/color]а не работает с кирилицей (utf 8)

подскажите пожалуйста все-таки!
как сделать чтоб

Цитата:

home
дом
yes
да
no
нет
можно было переводить как в одну так и в обратную сторону. может как то так?

Цитата:

en =home
ru=дом
en =yes
ru=да
en =no
ru=нет
плиз!плиз!плиз!

Aziz 21.08.2008 19:34

Re: чтение ресурса TXT
 
word,wort:string;
word:=...//Вводим слово
repeat

ru:=readLine(res);//Читаем английское слово
en:=readLine(res);//Читаем его перевод
if word=ru then wort:=en;
until (ru='#') or (word=ru);


если в списке руские слова то нифига не находит в поиске!
Цитата:

HOME
ДОМ
YES
ДА
если в списке транслит то находит!
Цитата:

HOME
DOM
YES
DA

подскажите решение для кирилицы плиз!

Piligrim 21.08.2008 21:51

Ответ: чтение ресурса TXT
 
Цитата:

Сообщение от odd (Сообщение 84813)
1. Во первых UpCase не пашет для русских букв.
2. А перекодировку из Win-1251 в UTF-8 кто будет делать?

Поиск русского текста в ресурсе действительно дело проблематичное. При неумелом подходе можно много времени тратить попусту.

А второй пункт выполнил? Файл со словами в какой кодировке?

ViNT 22.08.2008 01:33

Ответ: чтение ресурса TXT
 
Я просто приводил пример оптимальной структуры файла, а кодировку естественно, нужно учитывать. Функция для перекодировки из win-1251 в utf8 есть ЗДЕСЬ.
На счет UpCase - думаю, можно написать функцию и для русских строк, но придется перебирать строку побайтно, большие строки будут обрабатываться дольше(хотя, возможно, стандартная функция работает так же).

odd 22.08.2008 03:21

Ответ: чтение ресурса TXT
 
Я пользуюсь такой функцией перекодировки из Win-1251 в UTF-8 (написал сам):
PHP код:

function win2utf(sstring): string;
var 
lenchiinteger;
  
ststring;
begin
 st
:=''len:=Length(s)-1;
 for 
i:=0 to len do begin ch:=ord(GetChar(s,i)); if ch>122 then st:=st+chr(ch+1104) else st:=st+chr(ch); end;
 
win2utf:=st;
end


Aziz 22.08.2008 16:50

Re: чтение ресурса TXT
 
СПС ФРЕНДЫ

1) я когда сохранял в блокноте то выбирал УТФ 8, че в программе все ровно он видит как Win? надо прописывать перекодировку?
2) если 1 верно, то но как пользоваться этой функцией?

Цитата:

function win2utf(s: string): string;
var len, ch, i: integer;
st: string;
begin
st:=''; len:=Length(s)-1;
for i:=0 to len do begin ch:=ord(GetChar(s,i)); if ch>122 then st:=st+chr(ch+1104) else st:=st+chr(ch); end;
win2utf:=st;
end;
переменная для ввода слова в форму (word:=// введите слово.... "я ввел дом")

и что? как то так что ли ?

NewWord:=word(win2utf) ??



п.с. Думаю это мой финальный вопрос по этой теме))
извините нуба что отвлекаю!

odd 22.08.2008 19:50

Ответ: чтение ресурса TXT
 
Текст сохраняешь в Win-1251 (он же ANSI). Так он места меньше будет занимать.
Читаешь русские строки так:

PHP код:

s:=ReadLine(res); s:=win2utf(s); 

А потом уже можешь сравнивать типа:

PHP код:

if 'ДОМ' then ... 


Aziz 22.08.2008 22:26

Re: чтение ресурса TXT
 
спасибо ViNT
спасибо pilgrim
огромное спасибо odd

____________________________

please close the post :-D

RblSb 26.02.2014 16:57

Ответ: чтение ресурса TXT
 
С чтением русского текста все понятно, а как его нормально записать в файл в фс? :(
точнее неважно как записывать, главное чтобы потом можно было нормально открыть обратно


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

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