Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

Как загрузить в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.052 c
3-1192972241
diman315
2007-10-21 17:10
2008.03.09
Вытащить Data source из .udl


3-1192715486
Evgeny
2007-10-18 17:51
2008.03.09
Как сделать SQL запрос на выборку всех записей таблицы на этой не


2-1202839610
Igor23
2008-02-12 21:06
2008.03.09
апостроф


8-1175498564
Jar
2007-04-02 11:22
2008.03.09
Используемый кодек


15-1201937868
SKIPtr
2008-02-02 10:37
2008.03.09
Помогите с выбором материнской платы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский