Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение бинарных данных из stdin, текстовые - читаются, бинарные нет 
:(
    Опции темы
DoberZ
  Дата 19.11.2007, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



Есть способ постоения фильтров из цепоцек команд ( prog1.exe | prog2.exe | prog3.exe ) - например, приведённый код переводит все строки в нижний регистр. С текстовыми строками это работает отлично.
Код

program Project1;
{$APPTYPE CONSOLE}
uses
  SysUtils,windows;
Var Chaine: String;
Begin
    While not(Eof) Do
    Begin
      Readln(INPUT,Chaine);
      Writeln(OUTPUT,UpperCase(chaine));
    end
end.

Полблема в том, что двоичные данные так прочитать не получается, в то время как мен надо прочитать из стандартного ввода в буферную переменную ровно 176400 двоичных данных. А файловая переменная INPUT - текстовый файл... Пробовал и через CreateFile, и открывать нетипизированный файл с пустым именем - не выходит, хотя точно знаю, что так можно сделать...

Это сообщение отредактировал(а) DoberZ - 19.11.2007, 04:18
PM MAIL   Вверх
bems
Дата 19.11.2007, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Код

var f:file;buf:array[1..176400] of byte;
begin
TFileRec(f).handle:=GetStdHandle(STD_INPUT_HANDLE);
BlockRead(f,buf,SizeOf(buf));
...





--------------------
Обижено школьников: 8
PM MAIL   Вверх
DoberZ
Дата 19.11.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



спасибо, но:
I/O error 103 файл не открыт
при попытке чтения
(делфи 6)

зачем это надо: одна из программ цепи собирает двоичные данные, вторая делает преобразование Фурье, третья - фильтрует данные, четвёртая - делает обратное преобразование Фурье и так далее...

в Юникс нет разделения на текстовые и двоичные файлы, и всё работает отлично... а в досе стандартный ввод по умолчанию текстовый... так как это преодолеть? 

при открытии стандартными паскалевскими методами файла с пустым именем (в мане написано, что тогда откроется стандартный ввод) как нетипизированного файла наблюдается такая странная ситуация: синтаксис
Код

prog.exe < file.dat

работает как надо, а при попытке создать конвеер вот что пишет:
Код

type file.dat | prog.exe 
Попытка записи в несуществующий канал.

PM MAIL   Вверх
bems
Дата 20.11.2007, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Цитата(DoberZ @  19.11.2007,  22:20 Найти цитируемый пост)
а в досе стандартный ввод по умолчанию текстовый...
в первый раз об этом слышу. Помоему все дело в данной конкретной RTL

Цитата(DoberZ @  19.11.2007,  22:20 Найти цитируемый пост)
спасибо, но:
I/O error 103 файл не открыт
В прошлый раз я давал только примерный код в надежде что ты сам разберешся.
Вот так работает
Код

var f:file;buf:array[1..176400] of byte;
begin
TFileRec(f).mode:=fmInOut;
TFileRec(f).RecSize:=SizeOf(buf);
TFileRec(f).handle:=GetStdHandle(STD_INPUT_HANDLE);
BlockRead(f,buf,1);




--------------------
Обижено школьников: 8
PM MAIL   Вверх
DoberZ
Дата 21.11.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 25.6.2007

Репутация: нет
Всего: нет



спасибо. разобрался. ещё размер буфера пришлось уменьшить в 100 раз - иначе не работало...
PM MAIL   Вверх
bems
Дата 21.11.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



может быть. Проверял-то я на меньшем буфере smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0448 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.