| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Чтение из консоли |
| Автор: developer2007 25.6.2009, 17:04 |
| Читаю из консоли с помощью ReadConsoleOutputCharacter(hStdOut,PChar(lpBuff),ScrBuff.dwMaximumWindowSize.X, dwReadCoord, dwAvail). Проблема в том, что когда текста в строчке меньше чем ScrBuff.dwMaximumWindowSize.X, то добавляется ненужный мусор из параметров запуска программы. Это было почёрпнуто из МСДН. Надо как-то читать ровно столько в строчке символов, сколько их там есть, чтобы не было мусора. Кол-во символов в строке всегда переменно. |
| Автор: kami 25.6.2009, 19:50 |
| Что из себя представляет lpBuff? Добавлено через 2 минуты и 28 секунд В любом случае - нужно сперва прочитать с максимальным размером буфера, а потом подогнать размер буфера под реально прочитанное. |
| Автор: developer2007 26.6.2009, 21:20 |
| lpBuff : string; SetLength(lpBuff,ScrBuff.dwMaximumWindowSize.Y*ScrBuff.dwMaximumWindowSize.X); Добавлено через 1 минуту и 20 секунд А как тогда подогнать? Я же не знаю реальную длину текста - если при чтении беру по максимуму то в буфер попадает белиберда из параметров запуска и определить примерно где есть что только pos можно. |
| Автор: kami 26.6.2009, 23:33 | ||
а dwAvail не анализируете?
|
| Автор: kami 27.6.2009, 00:08 | ||||
Только если после SetLength сделать
Иначе в "незадействованной" части строки будет мусор, который для Trim не по зубам. Или (что правильнее - вдруг все прочитанное это пробелы, символы CR и LF после ReadConsoleOutputCharacter сделать
|
| Автор: Romikgy 27.6.2009, 00:16 | ||
нинаю у мя ReadConsoleOutputCharacter где пусто в консоли было всегда выдает забитое место пробелами , а мусор имхо от того что выделеная область намного больше чем читаемая.... |
| Автор: developer2007 29.6.2009, 19:02 |
Спасибо, камрад, как я сам не додумался! Помогло. |