Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.03.09;
Скачать: CL | DM;

Вниз

Как загрузить в Memo текст из файла в Юникоде   Найти похожие ветки 

 
transtream ©   (2008-02-12 20:15) [0]

Уважаемые профи, как загрузить в Memo текст в юникоде из файла?
Я делал так:

var s,s1:String;
    f:TextFile;
begin
 AssignFile(f, FileName);
 Reset(f);
  while not EoF(f) do
   begin
    ReadLn(f,s);
    s1:=WideCharToString(PWideChar(s));
    Memo1.Lines.Add(s1);
  end;
end;

В результате вместо символов текста я получаю знаки "?"...
Я так думаю, что все дело в WideCharToString(PWideChar(s)); кажется что здесь делаю что-то не то или совсем не то! Подскажите пожалуйста!


 
Efir   (2008-02-12 20:21) [1]

VCL не поддерживает юникод, используй сторонние компоненты, например TNTComponents.


 
Anatoly Podgoretsky ©   (2008-02-12 20:32) [2]

Дельфи поддерживает Юникод, вот только не надо использовать TextFile


 
transtream ©   (2008-02-12 20:35) [3]

у меня главная проблема даже не в отображении текста, а в получении данных из этого текста. Допустим, если взять ini файл, только в юникоде и вручную его обрабатывать.
Мне казалось чтобы его самому обработать надо его сначала в ANSI перекодировать...


 
transtream ©   (2008-02-12 20:35) [4]

а что просто через File??


 
Anatoly Podgoretsky ©   (2008-02-12 20:38) [5]

> transtream  (12.02.2008 20:35:04)  [4]

Можно и просто через File, но советую TFileStream и запись сразу в WideString с заранее установленой длиной, потом S := WS


 
transtream ©   (2008-02-12 21:14) [6]

не много не понятно со вторым параметром (длиной) в ReadBuffer. Если я хочу прочитать сразу весь файл, указывать Size?


 
Efir   (2008-02-12 21:17) [7]


> не много не понятно со вторым параметром (длиной) в ReadBuffer.
>  Если я хочу прочитать сразу весь файл, указывать Size?


Буфер - в байтах, поэтому - да.


 
transtream ©   (2008-02-12 21:37) [8]

при чтении выдает ошибку...


var  st: TFileStream;
    ws: PWideChar;
    s:String;
begin
  st:=TFileStream.Create(FileName, fmOpenRead);
  st.ReadBuffer(ws,st.Size); // здесь выдает ошибку
  s:=WideCharToString(ws);
end;


 
Leonid Troyanovsky ©   (2008-02-12 21:46) [9]


> transtream ©   (12.02.08 21:37) [8]

>   st.ReadBuffer(ws,st.Size); // здесь выдает ошибку

Грустно, девушки, грустно.
А ведь же совсем недавно поминали А.С. Пушкина.

И какой нах PWideChar.

--
Regards, LVT.


 
transtream ©   (2008-02-12 22:00) [10]

тогда что, если PWideChar?


 
Leonid Troyanovsky ©   (2008-02-12 22:11) [11]


> transtream ©   (12.02.08 22:00) [10]

> тогда что, если PWideChar?

[5]

Обидно за великого поэта.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2008-02-12 22:36) [12]

Читать умеешь? WideString и установить размер


 
transtream ©   (2008-02-12 23:08) [13]

все равно выдает ошибку!


 
Anatoly Podgoretsky ©   (2008-02-12 23:14) [14]

> transtream  (12.02.2008 23:08:13)  [13]

Все равно где и с каким кодом.
И так и говорит мол ошибка?


 
Efir   (2008-02-13 00:28) [15]


> transtream ©   (12.02.08 21:37) [8]


А память кто будет выделять, Пушкин?


 
Германн ©   (2008-02-13 00:44) [16]


> transtream ©   (12.02.08 23:08) [13]
>
> все равно выдает ошибку!
>

И будет выдавать до тех пор, пока не научишься работать со строками и динамическими массивами.


 
transtream ©   (2008-02-13 21:49) [17]

чтож... буду учиться!!! если что, еще обращусь!


 
Германн ©   (2008-02-14 01:38) [18]


> transtream ©   (13.02.08 21:49) [17]
>
> чтож... буду учиться!!! если что, еще обращусь!
>

Вот мудрая мысль. Обращайся.

P.S. Информация к размышлению.
В [8] две ошибки. Одна уже несколько раз озвучена. Вторая связана с первым параметром процедуры ReadBuffer.


 
transtream ©   (2008-02-14 15:44) [19]

ну первая ошибка понятно... невнимателен! а вторая, как тут и говорилось, выделение памяти... я сделал так:


var  st: TFileStream;
     ws: WideString;
     s:String;
begin
  st:=TFileStream.Create(FileName, fmOpenRead);
  SetLength(ws, st.Size);
  st.ReadBuffer(PWideChar(ws)^, st.Size);
  s:=ws;
  Memo1.Lines.Add(s);
end;


в принципе работает, только в конце знаки вопросов появляются...


 
transtream ©   (2008-02-14 15:46) [20]

ах... да еще St.Free...


 
Palladin ©   (2008-02-14 15:46) [21]

st.ReadBuffer(@ws[1], st.Size);



Страницы: 1 вся ветка

Текущий архив: 2008.03.09;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
2-1202760380
Steep
2008-02-11 23:06
2008.03.09
строки....


4-1184068039
Инс
2007-07-10 15:47
2008.03.09
fs:


8-1176205997
rexti
2007-04-10 15:53
2008.03.09
как перетащить текст


15-1202106974
Ega23
2008-02-04 09:36
2008.03.09
DLL vs BPL и RegisterClass


15-1201770344
SkyN
2008-01-31 12:05
2008.03.09
Бесплатным аналог VTune для Delphi7?