Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Delphi, ako zmenit vystupnu premennu?

Chcem si urobit jednoduchy program ktory spusti iny program a zachyti jeho vystup. Nasiel som si tento priklad http://zive.cz/h/Programovani/AR.asp?ARI=112035&CAI =2091 kde je to urobene tak ze sa to najskor zapise do suboru z neho do Memo a potom sa ten subor zmaze. Neviem to ale prerobit tak aby to zapisalo priamo do premennej napr. vystup:string. Poprosil by som niekoho kto tomu rozumie aby mi napisla ako to zmenit.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
mě jen není jasné, jak jinak než zachycením výstupu jiné aplikace do souboru (ergo přes OS) bys chtě…
touchwood 27.05.2006 22:33
touchwood
Ja v podstate proti suboru ani nic nemam len tato operacia sa bude vykonavat v cikle a nechcel som n…
Andrej 27.05.2006 23:26
Andrej
Nasiel som ze existuje v Delphi TMemIniFile ktory vsetky udaje uklada do vyrovnavacej pamate. //Tak…
Andrej 28.05.2006 01:32
Andrej
Nechapu, ceho chces dosahnout. K cemu potrebujes THandle pri praci s TMemIniFile ? Otevreni souboru…
Jan Fiala 28.05.2006 07:08
Jan Fiala
Kedze to bez suboru nejde tak som ho chcel nahradit niecim co nieje umiestnene na disku (proces sa b…
Andrej 28.05.2006 10:00
Andrej
Ak mas zdrojaky / robis oba programy, tak si nieco precitaj (napr. na msdn.microsoft.com) o komunika…
MM.. 28.05.2006 10:36
MM..
Program ktory chcem spustat je uz urobeny (nieje to program ktory som vytvoril ani k nemu nemam zdro…
Andrej 28.05.2006 12:51
Andrej
A uvedomuješ si, že píšeš protichodné veci? Ako chceš upraviť aplikáciu, ktorá je už vytvorená a nem…
msx. 28.05.2006 13:49
msx.
Este raz: 1) Je externy program ktory potrebujem spustit s urcitym parametrom ktory sa bude menit. 2…
Andrej 28.05.2006 16:14
Andrej
Áno už rozumiem, ale na druhej strane, disková vyrovnávacia pamäť pre takéto účely nie je až tak mal… nový
msx. 29.05.2006 08:39
msx.
Skús sa pozrieť sem, či je to, čo chceš: truco.cgi P.S. Ja som to skúsil s mojou konzolovou apliká…
pme 28.05.2006 18:51
pme
Tohle je ale odchytavany vystupu konzolove aplikace. Pokud to ta aplikace zapisuje do souboru, ktery… nový
Jan Fiala 28.05.2006 20:30
Jan Fiala
Chcem si urobit jednoduchy program ktory spusti iny program a zachyti jeho vystup. Hlavne o to išl… poslední
pme 29.05.2006 18:19
pme
Vdaka za odkaz :-);-). Funguje to tak ako som povodne chcel prerobit ten odkaz na zaciatku. Nezapisu… nový
Andrej 29.05.2006 00:12
Andrej
Klobúk dole.::) nový
msx. 29.05.2006 08:48
msx.

mě jen není jasné, jak jinak než zachycením výstupu jiné aplikace do souboru (ergo přes OS) bys chtěl docílit "přečtení" tohoto výstupu. Snad jen si napsat vlastní emulátor :-) Logicky přece musíš nechat systém aplikaci spustit, nechat proběhnout a její výstup přesměrovat do souboru nebo pipky. Bohužel pipky jsou v DOS/Win implementovány hrozně, takže ti nic jiného, než "sprostý soubor" :-D nezbývá.

Pokud jsem to nepochopil, tak sorry :-D

Nasiel som ze existuje v Delphi TMemIniFile ktory vsetky udaje uklada do vyrovnavacej pamate.

//Takze by som potreboval zmenit
var tmp: THandle;
tmp := CreateFile(PChar('Test.tmp'), Generic_Write, File_Share_Write,
@tmpSec, Create_Always, File_Attribute_Normal, 0);
//na 
var tmp:TMemIniFile;
tmp:= TMemIniFile.Create('vystup.ini');
// tak aby toto priradenie fungovalo
 start.hStdOutput := tmp;
 

Takze otazka znie ako z TMemIniFile urobit THandle aby to ukazovalo na subor 'vystup.ini'?

Kedze to bez suboru nejde tak som ho chcel nahradit niecim co nieje umiestnene na disku (proces sa bude vykonavat v cykle aby sa stale nevytvaral a nemazal na disku). Nakoniec to asi vyriesim pomocou RamDisku co je standardne v XP. Tam nepotrebujem nic menit a mozem k tomu pristupovat ako k disku a fyzicky to bude umiestnene v RAM.

Ak mas zdrojaky / robis oba programy, tak si nieco precitaj (napr. na msdn.microsoft.com) o komunikacii a prenose dat medzi procesmi/aplikaciami. Je to obsirna tema, riesit to cez subory je samozrejme najjednoduchsie ale (ako prave vidis) najchujovejsie riesenie.
To nemozes urobit len ako jednu aplikaciu?

Program ktory chcem spustat je uz urobeny (nieje to program ktory som vytvoril ani k nemu nemam zdrojove subory). Povodne som nevedel preco je v tom priklade pouzity subor ako medziclanok na prenos informacii a myslel som ze nahradenie za iny typ premennej nebude problem. Kedze to problem :-| je tak to budem riesit tym RamDiskom na ktorom budem pracovat. Hlavne my slo o disk aby sa nan neustale nevytvaral a nemazal subor ktory sluzi k prenosu udajov z externej aplikacie do mojho programu. Oznacil by som to za vyriesene. Pokial pozna niekto efektivnejsi sposob ktory nieje prilis narocny tak budem rad ak ho tu spomenie.

A uvedomuješ si, že píšeš protichodné veci? Ako chceš upraviť aplikáciu, ktorá je už vytvorená a nemáš k nej zdrojový kód, tak aby výstup neukladala na disk, ale do pamäti? Viem, že už si sa zmieril so súborom, ale doteraz si chcel súbor niečím nahradiť. Môžeš mi prosím vysvetliť, ako si si to predstavoval?

Este raz:
1) Je externy program ktory potrebujem spustit s urcitym parametrom ktory sa bude menit.
2) Ten odkaz na zaciatku ukazuje riesenie ako to realizovat v Delphi.
3) Externy program sa spusti a jeho vystup sa ulozi do suboru ktory sa na tento ucel vytvori. Z neho sa informacie nacitaju do Memo a subor sa zmaze.
4) Povodne som chcel aby sa informacie miesto do suboru ukladali do premennej typu string (cize do pamate nie do suboru fyzicky sa nachadzajucom na disku).
5) Teraz uz viem ze to take jednoduche nieje a tomu suboru sa asi nevyhnem takze som sa rozhodol to realizovat tak ako je to v tom priklade len s tym rozdielo ze ten subor bude umiestneny na RamDisku cize v pamati. Je to 'oklukou' ale zatial je to asi najlepsie riesenie ako tuto operaciu vykonavat v pamati a nie na disku.
Cele to vlastne bolo o tom ako zrychlit tento proces a aby som nepracoval s diskom ale s RAM. Dufam ze som to dostatocne objasnil.

Áno už rozumiem, ale na druhej strane, disková vyrovnávacia pamäť pre takéto účely nie je až tak malá, takže si myslím, že nie je nutné pracovať kvôli tomu práve s RAM diskom. Alebo to máš pravdepodobne asi odskúšané a nie si s tým spokojný, pretože ten disk ozaj veľmi šramoce? Zrejem to tak bude. Ale aký dlhý je teda ten výstupný súbor? Počítam, že rádovo megabyty, je tak?

Zpět do poradny Odpovědět na původní otázku Nahoru