Главная страница
    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.046 c
15-1201765184
Ega23
2008-01-31 10:39
2008.03.09
Дурной вопрос про QueryAnalyzer


15-1201875396
Riply
2008-02-01 17:16
2008.03.09
Экономия памяти при работе.


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


2-1201968437
reg
2008-02-02 19:07
2008.03.09
safearray


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