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=4176)

uairat 16.08.2007 17:53

как работать с тхт файлами?
 
делаю пример из хэлпа но он не раьотает.
чтение из тхт файла байта и строки первой

IGR 16.08.2007 17:59

Re: как работать с тхт файлами?
 
Цитата:

делаю пример из хэлпа но он не раьотает.
чтение из тхт файла байта и строки первой
покажи код !!

uairat 16.08.2007 18:27

Re: как работать с тхт файлами?
 
код
Код:

program TEMP;
VAR byte,i,j,k:integer; c:resource;line:string;
begin
c:= OpenResource('/data.txt');
   
      if (resourceAvailable(c)) then
      begin
          byte := ReadByte(c);
          line := ReadLine(c);
     
          CloseResource(c);
      end;
     
      ShowForm;
      i := FormAddString('Byte is: ' + chr(byte));
      i := FormAddString('Line is: ' + line);
      Delay(1000);

end.


IGR 16.08.2007 18:41

Re: как работать с тхт файлами?
 
это код точно как в хелпе ??
если да то проверь правильность имени файла !!

ViNT 16.08.2007 18:44

Re: как работать с тхт файлами?
 
Код рабочей, поэтому пара вопросов:
1.Файл имеет имя data.txt(должно быть как в коде) или например
Data.TXT?
2.После строки есть перевод на новую строку(должен быть)?

Файл должен выглядеть так:
Код:

b
line
//после line должна быть строка(хотябы пустая).


IGR 16.08.2007 18:50

Re: как работать с тхт файлами?
 
Цитата:

1.Файл имеет имя data.txt(должно быть как в коде) или например
Data.TXT?
тож должно быть data.txt тока он(файл) должен быть в папке с кодом програмы !!

Цитата:

После строки есть перевод на новую строку(должен быть)
если ReadLine то вроде нет !!

uairat 16.08.2007 18:55

Re: как работать с тхт файлами?
 
ааааа всё!
не было перевода на новую строку
большое спасибо!

dimanche13 16.08.2007 18:56

Re: как работать с тхт файлами?
 
пока печатал, он уже разобрался))))))

uairat 16.08.2007 18:58

Re: как работать с тхт файлами?
 
dimanche13 спасибо)

uairat 16.08.2007 20:45

Re: как работать с тхт файлами?
 
у меня теперь возник ещё впросик.
как сделать чтобы читалась кириллица?
сохранял в юникод,анси ничего правильно не читается

ViNT 16.08.2007 23:23

Re: как работать с тхт файлами?
 
Вообще должна быть кодировка UTF-8 по сути Юникод. Попробуй набирать текст в редакторе MP.

uairat 17.08.2007 13:04

Re: как работать с тхт файлами?
 
ни один вариант не работает....
кодировки попробовал,в редакторе попробовал написать...
не читается

ViNT 17.08.2007 15:20

Re: как работать с тхт файлами?
 
А проверял как, на эмуляторе или на мобиле?
Ато на некоторых эмуляторах бывает проблема с кирилицей, а на мобиле все нормально.

Piligrim 17.08.2007 18:20

Re: как работать с тхт файлами?
 
Эмулятор чаще всего читает win1251, а телефон берет utf8

uairat 17.08.2007 20:54

Re: как работать с тхт файлами?
 
все пробовал на эмуле.
почти все на телефоне.
попробую win1251

uairat 17.08.2007 21:28

Re: как работать с тхт файлами?
 
нет.не работает utf8
а как в win1251 сохранить? в блокноте нет такого варианта

uairat 24.08.2007 12:42

Re: как работать с тхт файлами?
 
ну помогите пожалуйста мне для одной проги нужно считывать русские символы из тхт

MotoMustanger 30.08.2007 17:30

Re: как работать с тхт файлами?
 
Посмотри >>тут<< В самом конце темы есть ф-я, которая переводит русскую кирилицу. Набирать текст надо через редактор в МР. У меня заработало.

Frank 10.09.2007 21:37

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;


odd 11.09.2007 08:13

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;


rimm 20.09.2007 21:20

Re: как работать с тхт файлами?
 
Для сохранения в формате win1251 и не только поможет текстовый редактор EmEditor

rimm 20.09.2007 21:26

Re: как работать с тхт файлами?
 
И вот такой вопрос: почему бы не считывать инфу с текстового ресурса побайтово? Подскажите код символа перехода на новую строку please...

odd 21.09.2007 09:15

Re: как работать с тхт файлами?
 
Коды перехода на новую строку в Windows: 0x0D 0x0A (в десятичной: 13 и 10) они всегда должны идти в паре и именно в такой последовательности. Можно читать и побайтово, но скорость чтения упадет раза в 2, а это не есть гуд. Лучше читать строками, а в конце строки ставить только символ с кодом 0x0D и всё будет работать и давать неплохую экономию памяти если строк очень много. Для обработки текстовых файлов я использую MiBEditor 1.26. Там просто ставишь формат файла "Mac" и он автоматом все переносы строки делает 0x0D.

rimm 22.09.2007 18:19

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.

ViNT 22.09.2007 22:59

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);


rimm 23.09.2007 00:28

Re: как работать с тхт файлами?
 
Точно. Как я раньше не допер! А можно в условии указать readline(res)<>'' Тогда и переменная buf не нужна (мелочь, а приятно :) )...

odd 23.09.2007 10:13

Re: как работать с тхт файлами?
 
Цитата:

Сообщение от rimm
Точно. Как я раньше не допер! А можно в условии указать readline(res)<>'' Тогда и переменная buf не нужна (мелочь, а приятно :) )...

Не, так указывать нельзя. Ты же строку в итоге потеряешь.
Кстати, не стоит забывать об известном глюке MP: при достижении конца файла он должен возращать пустую строку, но такого почему-то не происходит. Так что условие byf<>'' будет ввыполняться всегда и соответственно и текстовый файл вы будете читать до бесконечности (программа зависнет в бесконечном цикле). Для решения этой проблемы надо в конце файла прописать какую-нибудь текстовую константу, служащую маркером конца файла. Например, в конце пишем строку ###
, условие выхода из цикла тогда будет buf<>'###'.

rimm 23.09.2007 11:42

Re: как работать с тхт файлами?
 
Да, TurboPascalевские замашки, похоже, здесь не пройдут...

slotoskol 11.11.2007 00:41

Re: как работать с тхт файлами?
 
спасибо большое

BrainPhP 02.04.2009 12:46

Ответ: как работать с тхт файлами?
 
Добрый день!
с файлами все ясно, кириллицу можно увидить исспользуя, функцию предоставленную ODDом,
при этом файл может быть в ДОС кодировке..
респект ODD!

подскажите как добиться русских букв, если мы тянем данные с сайта,
в какой кодировке нужно слать данные?


на стороне сервера пробывал следующее:

// из win1251 в utf-8
$nstr = iconv("CP1251","UTF-8", $nstr);

// из win1251 в DOS
$nstr = iconv("CP1251","CP866", $nstr);

// win1251 (без функции iconv)

не помогло(
ребята, подскажите как быть?

@llien 25.05.2009 11:08

Ответ: как работать с тхт файлами?
 
хех у мя тело читает текст в исо!

@llien 25.05.2009 11:22

Ответ: Re: как работать с тхт файлами?
 
Цитата:

Сообщение от Frank (Сообщение 54045)
Блин... только что сам наткнулся на эту проблему и изобрел велосипед :)
Вот мой вариант этой функции, у меня все работает - проверял :)
Код:

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 27.06.2009 15:39

Ответ: как работать с тхт файлами?
 
@llien, а ты уверен, что aureli0 сам изобрел этот способ, а не позаимствовал у Frank'а?


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

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