[Matlab7] File openen in ander programma

Pagina: 1
Acties:
  • 153 views sinds 30-01-2008
  • Reageer

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
Ik probeer om een (tab-delimited) bestand dat ik genereer met een Matlab .m-script via een shell-commando in Excel te openen. Ik heb nu twee alternatieven:
code:
1
2
system([directory '\results.lvm']);   
winopen([directory '\results.lvm']);

De aanroep van system() werkt: Excel wordt gestart en het bestand opent. Maar.... het Matlab-script blijft hangen op deze aanroep totdat Excel wordt gesloten. Op zich logisch, omdat system() wordt geacht een resultaat terug te geven dat mij verder niet interesseert.
Mijn tweede alternaties, winopen(), doet het op zich ook, maar alleen met bepaalde bestandsextenties. Als ik een .doc, .xls, .txt, whatever loslaat op deze functie gaat het prima. Op mijn PC heb ik .lvm ook met Excel geassocieerd, dus bij een dubbelklik in de explorer opent dat netjes. Matlab knalt er echter uit met de onzinnige melding:
??? There is no application associated with the given file name extension.
Gelul :?.

Het is even geen optie om de output-bestanden te hernoemen. Matlab moet dit ook gewoon kunnen wat mij betreft :).
Samenvattend: hoe laat ik een willekeurig bestand openen vanuit een Matlab .m-script in het programma dat er mee geassocieerd is in Windows, zonder dat mijn script wacht op het resultaat van die aanroep?

Zo scherp als een voetbal!


  • Coffeemonster
  • Registratie: Juli 2000
  • Laatst online: 20-08 17:41
Werkt winopen(['C:\Program Files\Microsoft Office\Office\Excel.exe directory\results.lvm']) niet?

Look for something long enough and you will find it; look for something without understanding, and it will find you.
A normal day at the stock exchange


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
Nope,
code:
1
winopen(['C:\Program Files\Microsoft Office\Office10\EXCEL.EXE ' directory '\results.lvm']);
geeft als fout:
??? Error using ==> winopen
The specified file does not exist.

Error in ==> manygraphs at 45
winopen(['"C:\Program Files\Microsoft Office\Office10\EXCEL.EXE" ' directory '\results.lvm']);
Pad, naam, etc. kloppen gewoon natuurlijk :).Dit zou hoe dan ook niet handig zijn, omdat mijn script dan eerst de locatie van Excel moet bepalen (of kennen). Lelijk :+. Bovendien werkte het al zonder excel te noemen, als ik maar een "standaard" extentie (.xls, .doc, ...) gebruik.
Het lijkt er op dat er in winopen een soort van parser gebruikt wordt, die zelf de link tussen een extentie en een programma probeert te leggen. Helaas zit dat deel in een dll verstopt: win_open_mex.dll in C:\MATLAB7\toolbox\matlab\winfun\private.

[ Voor 59% gewijzigd door Reptile209 op 14-12-2005 17:48 ]

Zo scherp als een voetbal!


  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 23:53
Kun je proberen ' &' achter je opdracht te typen?
dus:
code:
1
 system([directory '\results.lvm &']);

Als het goed is keer je dan meteen met resultaat 0 terug naar het script.

Misschien moet dit topic gemoved naar "Programming & Webscripting"?

[ Voor 65% gewijzigd door RikTW op 14-12-2005 19:30 ]


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 00:19
RikTW: je had het niet helemaal goed, maar dankzij jou ben ik er nu eindelijk wel achter. De werkende oplossing is het commando:
code:
1
system(['start excel "' directory '\results.lvm"']);  % de dubbele quotes om spaties in pad en filenaam te behouden

Precies dit commando met dos() in plaats van system() kan overigens ook, de truuk zit 'm duidelijk in het gebruik van "start excel "filename": start begint een nieuw proces op de achtergrond, maar blijkbaar is het noodzakelijk dat je excel ook expliciet aanroept. Zo niet, dan krijg je een lege shell met prompt en verder niks.
Het gebruik van '&' in enige combinatie leverde alleen maar bevroren shell-vensters op, die een prompt geven op het moment dat Excel weer wordt gesloten. Het probleem wordt dan dus alleen maar verplaatst.
Start rulez, winopen() zuigt nog steeds :).

offtopic:
Jah, PW had ook gekund. SA was mijn eerste gokje omdat het nou niet echt high-tech programming betreft :)

[ Voor 6% gewijzigd door Reptile209 op 14-12-2005 20:51 ]

Zo scherp als een voetbal!


  • RikTW
  • Registratie: Januari 2004
  • Laatst online: 23:53
Ja, nu je het zegt, dat klopt natuurlijk. :9
Ik gebruik altijd 'dos' of '!' om progsels te starten in de shell.

Misschien wat off topic, maar ik weet dat ik vroeger ook wel eens (3rd party) functies gebruikte om rechtstreeks met excel te werken vanuit matlab. Als je geinteresseerd bent kun je even zoeken op mathworks of me ff aan mn mouw trekken.
Pagina: 1