Главная страница
    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.49 MB
Время: 0.032 c
2-1202810874
Аян
2008-02-12 13:07
2008.03.09
нужна подсказка


8-1176801617
dr_craigan
2007-04-17 13:20
2008.03.09
Изображение


2-1202658365
Kirill
2008-02-10 18:46
2008.03.09
Actions


15-1202094345
Slider007
2008-02-04 06:05
2008.03.09
С днем рождения ! 4 февраля 2008 понедельник


2-1202991249
UMU
2008-02-14 15:14
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский