Чтобы перенаправить поток с выхода на вход нужно использовать временный файл или нужен другой способ?
Lapp
22.10.2008 20:03
Цитата(Анна @ 22.10.2008 19:30)
перенаправить поток с выхода на вход
Это типа замкнуть процесс сам на себя? Хм.. Никогда не задумывался над этим.. Так на вскидку придумать как обойтись без промежуточного файла не могу. Мне кажется. не обойтись без него.
К примеру, tr -d "[0-9]" < a.txt | sort | uniq > b.txt Поток с удаленными [0-9] с выхода подать на вход для сортировки и т.д.
volvo
22.10.2008 21:05
Цитата
К примеру, tr -d "[0-9]" < a.txt | sort | uniq > b.txt Поток с удаленными [0-9] с выхода подать на вход для сортировки и т.д.
Ну, и что? Я так тоже умею: tasklist | sort (поток с выхода tasklist подать на вход sort)... Конкретнее, в чем проблема? Тебе это что, на Паскале реализовать надо?
Анна
22.10.2008 21:24
Не знаю как реализовать на Паскале..
volvo
23.10.2008 19:59
Ну, поскольку ты молчишь, на каком Паскале тебе это надо реализовать, и что представляет из себя тот самый поток, то предложу тебе вот такой вариант (псевдокод, но реализация существует... Раздел не тот, чтоб приводить программу полностью) :
type
stream = list; { <--- обычный односвязный список }procedure read_stream(var f: text): stream; { <--- вернет указатель на голову списка }begin{...}end;
procedure write_stream(in_stream: stream; var f: text);
begin{...}end;
procedure tr(in_stream: stream; params: setof char): stream;
begin{...}end;
procedure sort(in_stream: stream): stream;
begin{...}end;
{ Вызывается все это вот так: }
write_stream(sort(tr(read_stream(f_in), ['0' .. '9'])), f_out);
И никаких временных файлов... В принципе, вместо f_out можно даже подставить тот же f_in...
Теперь насчет списка... Чем не поток? Тоже обрабатывается последовательно, как и текстовый файл...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.