Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Memo в CBuilder


Автор: Гость_Alex 26.7.2004, 11:39
Помогите пожалуйста, сил больше нет

Как в CBuilder отобразить текст в мемо считанный из файла в бинарном формате.
Делаю так:

int fh;
fh = open( "C:/Aaa.dat", O_RDONLY | O_BINARY );

char *pBufRead = new char[10000];
read( fh, pBufRead, nMaxBufLen );

char aa[70];
int vLen = 70;
for (int i = 0; i < vLen; i++) { aa[i] = (char) pBufRead[i]; }

Memo1->Lines->Add(aa);

и в мемо передается только первый символ.
Очень хотелось бы увидеть строку из 70 символов но ничего не получается.



Автор: zss 26.7.2004, 12:36
попробуй

...->Font->Style = "Symbol";

Автор: Гость_Alex 26.7.2004, 12:45
...->Font->Style = "Symbol";

Поясни пожалуйста.


Автор: zss 26.7.2004, 12:47
Цитата
...->Font->Style = "Symbol";

Поясни пожалуйста.

Покажи кусок массива, в который ты прочитал из файла

Автор: gray_k 26.7.2004, 13:06
Код
Memo1->Lines->Add( AnsiString(aa).SetLength(70) );

Автор: Guest 26.7.2004, 13:10
В смысле значения показать?
В каком види символьном или бинарном.

Вообще то вопрос в том что я не могу в мемо вывести строкой эти значения, вот к примеру если изменить так

for (int i = 0; i < vLen; i++)
{
aa[i] = (char) pBufRead[i];
Memo1->Lines->Add(aa[i]);
}

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

M
u
¨
<
K
»
}

а нужно так - Mu¨<K»}


Автор: Конструктор 26.7.2004, 15:05
Проверь чтобы у тебя в буфере сразу после первой буквы не было нулевого символа, а то он (АнсиСтринг) подумает, что это такая короткая строка. Попробуй завести временную переменную типа AnsiString и присвой ей значение строки aa. Посмотри что там полуичлось внутри на всякий случай. Затем передай этот AnsiString в функцию Add.

Автор: Guest 26.7.2004, 16:08
Цитата
Проверь чтобы у тебя в буфере сразу после первой буквы не было нулевого символа, а то он (АнсиСтринг) подумает, что это такая короткая строка. Попробуй завести временную переменную типа AnsiString и присвой ей значение строки aa. Посмотри что там полуичлось внутри на всякий случай. Затем передай этот AnsiString в функцию Add.

Я пробовал завести временную переменную типа AnsiString и присвоить ей значение аа, результат тот же
там в строке действительно второй символ нуль и когда я кидаю его в мемо (Add) то второй символ воспринимается наверное как конец строки. Как это избежать. thumbs-up.gif

Автор: zss 26.7.2004, 16:27
как я и говорил

...->Font->Style = "Symbol" - вывод непечатанных символов (выводи все что угодно)

Автор: Alex_G 26.7.2004, 16:44
можно подробнее или пример какой, а то чо то я не пойму как это сделать:

...->Font->Style = "Symbol" - вывод непечатанных символов (выводи все что угодно)



Автор: zss 26.7.2004, 17:17
Извини я ошибся - не Style, а Name

перед выводом выстави шрифт
Код

Memo->Font->Name = "Simbol";



Автор: Alex_G 26.7.2004, 17:43
Попробовал Memo1->Font->Name = "Simbol";
Результат тот же - выводит один символ.
Конструктор прав. Там второй символ 0 и поэтому после второго символа ничего не выводит.
Кто знает как напечатать символ 0?

Автор: NiJazz 26.7.2004, 19:26
А можно Memo->Lines->LoadFromFile(sFileName)
Тут файл должен быть "красивым".

Автор: zss 27.7.2004, 08:33
тогда если это 0, то
Код

for(int k = 0; k < sizeof(aa); k++){
   if (aa[k] == 0) aa[k] = ' ';
}


если же тебе не критично значение нуля, то можешь преобразовать его в O
Код

for(int k = 0; k < sizeof(aa); k++){
   if (aa[k] == 0) aa[k] = 'O';
}


Автор: _vitusik 2.8.2004, 12:55
попробуй не

aa[i] = (char) pBufRead[i];
Memo1->Lines->Add(aa[i]);

а

aa[i] = (char) pBufRead[i];
Memo1->Tex[i]=aa[i];

Автор: Олег М 2.8.2004, 13:50
Цитата
Как в CBuilder отобразить текст в мемо считанный из файла в бинарном формате.

Так там у тебя вообще любые символы хранятся? Если да, то надо заменять, которые непечатаемые. Иначе никак. Определить это можно с помощью функций isalnum, IsCharAlpha и других из этой серии.

Автор: <Spawn> 2.8.2004, 16:35
Можно все это сделать методами LoadFromFile(Как уже сказал Monty) или при помощи LoadFromStream, предворительно прочитав файл, например экземпляром TFileStream.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)