|
Основной форум Сюда все проблемы связанные с программированием. |
17.08.2007, 21:28
|
#16
|
AnyKey`щик
Регистрация: 15.08.2007
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
нет.не работает utf8
а как в win1251 сохранить? в блокноте нет такого варианта
|
(Offline)
|
|
24.08.2007, 12:42
|
#17
|
AnyKey`щик
Регистрация: 15.08.2007
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
ну помогите пожалуйста мне для одной проги нужно считывать русские символы из тхт
|
(Offline)
|
|
30.08.2007, 17:30
|
#18
|
Нуждающийся
Регистрация: 13.11.2006
Сообщений: 60
Написано одно полезное сообщение
|
Re: как работать с тхт файлами?
Посмотри >>тут<< В самом конце темы есть ф-я, которая переводит русскую кирилицу. Набирать текст надо через редактор в МР. У меня заработало.
|
(Offline)
|
|
10.09.2007, 21:37
|
#19
|
Нуждающийся
Регистрация: 22.07.2006
Сообщений: 50
Написано 6 полезных сообщений (для 19 пользователей)
|
Re: как работать с тхт файлами?
Блин... только что сам наткнулся на эту проблему и изобрел велосипед
Вот мой вариант этой функции, у меня все работает - проверял
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;
|
(Offline)
|
|
11.09.2007, 08:13
|
#20
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Re: как работать с тхт файлами?
Кому надо - вот моя процедура по перегонке текста из Win1251 (например, текстовый файл, сохраненный в блокноте как ANSI) в UTF8.
Function Encode(a: string): string;
var len, ch: integer;
st: string;
begin
st:=''; len:=Length(a)-1;
for i:=0 to len do begin ch:=ord(GetChar(a,i));
if ch>126 then st:=st+chr(ch+1104) else st:=st+chr(ch); end;
Encode:=st;
end;
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
20.09.2007, 21:20
|
#21
|
AnyKey`щик
Регистрация: 28.08.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
Для сохранения в формате win1251 и не только поможет текстовый редактор EmEditor
|
(Offline)
|
|
20.09.2007, 21:26
|
#22
|
AnyKey`щик
Регистрация: 28.08.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
И вот такой вопрос: почему бы не считывать инфу с текстового ресурса побайтово? Подскажите код символа перехода на новую строку please...
|
(Offline)
|
|
21.09.2007, 09:15
|
#23
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Re: как работать с тхт файлами?
Коды перехода на новую строку в Windows: 0x0D 0x0A (в десятичной: 13 и 10) они всегда должны идти в паре и именно в такой последовательности. Можно читать и побайтово, но скорость чтения упадет раза в 2, а это не есть гуд. Лучше читать строками, а в конце строки ставить только символ с кодом 0x0D и всё будет работать и давать неплохую экономию памяти если строк очень много. Для обработки текстовых файлов я использую MiBEditor 1.26. Там просто ставишь формат файла "Mac" и он автоматом все переносы строки делает 0x0D.
|
(Offline)
|
|
22.09.2007, 18:19
|
#24
|
AnyKey`щик
Регистрация: 28.08.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
Как я понял, функция readLine считывает следующую строку из ресурса. Значит, если в ресурсе несколько строк то функция должна вызываться циклически (например, в цикле с предусловием resourceAvailable(res)=true). Только вот облом какой-то: ресурс не содержит кирилицы, написан в редакторе MP, в нем 3 строки:
some text for trying it to output
string2
string3
Но эмулятор (MidpX J2ME Emulators Package) ничего не показывает.
Считывание же 1-ой строки без цикла свой результат приносит.
В чем же дело???
program OpenTxtResourse;
var
s: array[1..10] of string;
m: array[1..10] of integer;
res : resource;
line : string;
index : integer;
begin
res := OpenResource('/data1.txt');
while resourceAvailable(res) do
begin
s[2] := ReadLine(res);
line:=line+s[2];
end;
closeResource(res);
showForm;
index := formAddString('Byte is: ' + line);
delay(10000);
end.
|
(Offline)
|
|
22.09.2007, 22:59
|
#25
|
Модератор
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
|
Re: как работать с тхт файлами?
resourceAvailable(res) указывает на доступность ресурса, поэтому программа просто зависает, так как ресурс доступен и resourceAvailable(res) всегда = true.
Помоему надо делать так:
var
buf:string;
begin
...
buf:='x';
while buf<>'' do
begin
buf := ReadLine(res);
s[2]:=buf;
line:=line+s[2];
end;
index := formAddString('Byte is: ' + line);
|
(Offline)
|
|
23.09.2007, 00:28
|
#26
|
AnyKey`щик
Регистрация: 28.08.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
Точно. Как я раньше не допер! А можно в условии указать readline(res)<>'' Тогда и переменная buf не нужна (мелочь, а приятно )...
|
(Offline)
|
|
23.09.2007, 10:13
|
#27
|
Мастер
Регистрация: 06.09.2007
Адрес: Донецк, ДНР
Сообщений: 1,023
Написано 298 полезных сообщений (для 713 пользователей)
|
Re: как работать с тхт файлами?
Сообщение от rimm
Точно. Как я раньше не допер! А можно в условии указать readline(res)<>'' Тогда и переменная buf не нужна (мелочь, а приятно )...
|
Не, так указывать нельзя. Ты же строку в итоге потеряешь.
Кстати, не стоит забывать об известном глюке MP: при достижении конца файла он должен возращать пустую строку, но такого почему-то не происходит. Так что условие byf<>'' будет ввыполняться всегда и соответственно и текстовый файл вы будете читать до бесконечности (программа зависнет в бесконечном цикле). Для решения этой проблемы надо в конце файла прописать какую-нибудь текстовую константу, служащую маркером конца файла. Например, в конце пишем строку ###
, условие выхода из цикла тогда будет buf<>'###'.
|
(Offline)
|
|
23.09.2007, 11:42
|
#28
|
AnyKey`щик
Регистрация: 28.08.2007
Сообщений: 5
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
Да, TurboPascalевские замашки, похоже, здесь не пройдут...
|
(Offline)
|
|
11.11.2007, 00:41
|
#29
|
AnyKey`щик
Регистрация: 10.11.2007
Сообщений: 10
Написано 0 полезных сообщений (для 0 пользователей)
|
Re: как работать с тхт файлами?
спасибо большое
|
(Offline)
|
|
02.04.2009, 12:46
|
#30
|
AnyKey`щик
Регистрация: 02.04.2009
Сообщений: 1
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: как работать с тхт файлами?
Добрый день!
с файлами все ясно, кириллицу можно увидить исспользуя, функцию предоставленную ODDом,
при этом файл может быть в ДОС кодировке..
респект ODD!
подскажите как добиться русских букв, если мы тянем данные с сайта,
в какой кодировке нужно слать данные?
на стороне сервера пробывал следующее:
// из win1251 в utf-8
$nstr = iconv("CP1251","UTF-8", $nstr);
// из win1251 в DOS
$nstr = iconv("CP1251","CP866", $nstr);
// win1251 (без функции iconv)
не помогло(
ребята, подскажите как быть?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:32.
|