|
Основной форум Сюда все проблемы связанные с программированием. |
20.08.2008, 22:20
|
#1
|
Оператор ЭВМ
Регистрация: 24.02.2007
Сообщений: 20
Написано 0 полезных сообщений (для 0 пользователей)
|
чтение ресурса TXT
мобильный переводчик
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);
|
|
(Offline)
|
|
21.08.2008, 01:49
|
#2
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: чтение ресурса TXT
Ну, например, ресурсный файл типа
А поиск тогда как-то так:
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 будет перевод, или английское слово, если перевод не найден
|
(Offline)
|
|
21.08.2008, 08:07
|
#3
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: чтение ресурса TXT
1. Во первых UpCase не пашет для русских букв.
2. А перекодировку из Win-1251 в UTF-8 кто будет делать?
Поиск русского текста в ресурсе действительно дело проблематичное. При неумелом подходе можно много времени тратить попусту.
|
(Offline)
|
|
21.08.2008, 11:54
|
#4
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: чтение ресурса TXT
Ну, если делать только англо-русский перевод, то применять UpCase для русских слов не потребуется =).
Ну а перекодировку я не писал потому, что просто показывал принцип поиска, а не рабочую программу.
|
(Offline)
|
|
21.08.2008, 18:05
|
#5
|
Оператор ЭВМ
Регистрация: 24.02.2007
Сообщений: 20
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: чтение ресурса TXT
Народ! А что тогда в замен для UpCase?
ViNT большое спасибо! Но твой код допускает баги ( и даже без COLOR="DarkOrange"]UpCase[/color]а не работает с кирилицей ( utf 8)
подскажите пожалуйста все-таки!
как сделать чтоб
можно было переводить как в одну так и в обратную сторону. может как то так?
en =home
ru=дом
en =yes
ru=да
en =no
ru=нет
|
плиз!плиз!плиз!
|
(Offline)
|
|
21.08.2008, 19:34
|
#6
|
Оператор ЭВМ
Регистрация: 24.02.2007
Сообщений: 20
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: чтение ресурса TXT
word,wort:string;
word:=...//Вводим слово
repeat
ru:=readLine(res);//Читаем английское слово
en:=readLine(res);//Читаем его перевод
if word=ru then wort:=en;
until (ru='#') or (word=ru);
если в списке руские слова то нифига не находит в поиске!
если в списке транслит то находит!
подскажите решение для кирилицы плиз!
|
(Offline)
|
|
21.08.2008, 21:51
|
#7
|
Оптимист
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений (для 259 пользователей)
|
Ответ: чтение ресурса TXT
Сообщение от odd
1. Во первых UpCase не пашет для русских букв.
2. А перекодировку из Win-1251 в UTF-8 кто будет делать?
Поиск русского текста в ресурсе действительно дело проблематичное. При неумелом подходе можно много времени тратить попусту.
|
А второй пункт выполнил? Файл со словами в какой кодировке?
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.08.2008, 01:33
|
#8
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Ответ: чтение ресурса TXT
Я просто приводил пример оптимальной структуры файла, а кодировку естественно, нужно учитывать. Функция для перекодировки из win-1251 в utf8 есть ЗДЕСЬ.
На счет UpCase - думаю, можно написать функцию и для русских строк, но придется перебирать строку побайтно, большие строки будут обрабатываться дольше(хотя, возможно, стандартная функция работает так же).
|
(Offline)
|
|
22.08.2008, 03:21
|
#9
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: чтение ресурса TXT
Я пользуюсь такой функцией перекодировки из Win-1251 в UTF-8 (написал сам):
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;
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.08.2008, 16:50
|
#10
|
Оператор ЭВМ
Регистрация: 24.02.2007
Сообщений: 20
Написано 0 полезных сообщений (для 0 пользователей)
|
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) ??
п.с. Думаю это мой финальный вопрос по этой теме))
извините нуба что отвлекаю!
Последний раз редактировалось Aziz, 22.08.2008 в 17:13.
|
(Offline)
|
|
22.08.2008, 19:50
|
#11
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Ответ: чтение ресурса TXT
Текст сохраняешь в Win-1251 (он же ANSI). Так он места меньше будет занимать.
Читаешь русские строки так:
s:=ReadLine(res); s:=win2utf(s);
А потом уже можешь сравнивать типа:
|
(Offline)
|
|
22.08.2008, 22:26
|
#12
|
Оператор ЭВМ
Регистрация: 24.02.2007
Сообщений: 20
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: чтение ресурса TXT
спасибо ViNT
спасибо pilgrim
огромное спасибо odd
____________________________
please close the post
|
(Offline)
|
|
26.02.2014, 16:57
|
#13
|
Оператор ЭВМ
Регистрация: 25.08.2013
Адрес: Москва
Сообщений: 45
Написано 13 полезных сообщений (для 28 пользователей)
|
Ответ: чтение ресурса TXT
С чтением русского текста все понятно, а как его нормально записать в файл в фс?
точнее неважно как записывать, главное чтобы потом можно было нормально открыть обратно
Последний раз редактировалось RblSb, 26.02.2014 в 19:03.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:09.
|