Въпрос за добря стар Pascal?

4 отговора 197 прегледа
#1

Въпрос за добря стар Pascal?

Ако някой е знаел и все още си спомня от едно време за Турбо (Борланд) Паскал, имам следния въпрос?
Предварително се извинявам ако въпроса ми не е съвсем коректен, но моля за помощ.
Как може от програма на Паскал чрез използване на оператора "Exec" или по друг начин, да се стартира дос команда (програма), като при това изходът от програмата да се пренасочи във файл. Тоест да се получи същият ефект, както би се получил от използването на командния ред
c:\>dos_comanda > fail, за да мога после допълнително да обработя този "fail" по нататък?
Или как мога резултатът от тази дос команда директно да го вкарам за обработка в моята програма дори без да преминавам през този файл като посредник?

Видът на оператора е:
Exec(ProgramName, CmdLine);
и ако искам да изпълня дос командата: arp -a >text.txt
Exec ('arp' , '-a >text.txt'); не пренасочва резултатът към файл а го изпе4атва на екрана. тоест не приема '>text.txt' като параметър към arp
и работи все едно е написано само Exec ('arp' , '-a');

Thanks in advance :))

Отговор
в отговор на Heзнaйko #2

Re: Въпрос за добря стар Pascal?

пробвай това:)
program test;
uses dos;
{$M $8192,0,0 }
begin
SwapVectors;
Exec(GetEnv('COMSPEC'), '/C arp.exe -a >c:\arp.txt');
SwapVectors;
end.

Отговор
в отговор на - #3

Re: Въпрос за добря стар Pascal?

То всъщност зависи от начина, по който това arp пише на екрана. Трябва да е със стандартните функции за вход/изход за да стане пренасочването.

Отговор
в отговор на Formal #4

Re: Въпрос за добря стар Pascal?

става с малко мускули. Ако програмата ти използва стандартния изход на DOS, което е доста вероятно, трябва преди да я стартираш да направиш следното:
- създаваш копие на файловия манипулатор, който е стандартния изход (#1 ) и го запазваш някъде ( int 0x21 function 0x45 ). С функция 0x46 го насочваш да сочи към FM #4 ( printer ). Изпълняваш EXEC. След изхода на програмата пак с 0x46 насочваш #1 да сочи където си е бил ( нали си го запимнил ) Това е начинът. И Command.Cum така го прави.

Отговор
в отговор на Heзнaйko #5

Re: Въпрос за добря стар Pascal?

Начина с
Exec(GetEnv('COMSPEC'), '/C arp.exe -a >c:\arp.txt');
ми се вижда най-чист, ако става.
Иначе наистина с малко мускули и Int 21h (DOS функции на ниско ниво) пак става, но е по-тромаво и по-трудничко, особено ако нямаш много опит с това.

---
...и аз пиша на кирилица!
Отговор