| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Покажи кусок массива, в который ты прочитал из файла |
| Автор: gray_k 26.7.2004, 13:06 | ||
|
| Автор: 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 и присвоить ей значение аа, результат тот же там в строке действительно второй символ нуль и когда я кидаю его в мемо (Add) то второй символ воспринимается наверное как конец строки. Как это избежать. |
| Автор: 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 перед выводом выстави шрифт
|
| Автор: 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, то
если же тебе не критично значение нуля, то можешь преобразовать его в 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 | ||
Так там у тебя вообще любые символы хранятся? Если да, то надо заменять, которые непечатаемые. Иначе никак. Определить это можно с помощью функций isalnum, IsCharAlpha и других из этой серии. |
| Автор: <Spawn> 2.8.2004, 16:35 |
| Можно все это сделать методами LoadFromFile(Как уже сказал Monty) или при помощи LoadFromStream, предворительно прочитав файл, например экземпляром TFileStream. |