C# externe Parameterübergabe

Hallo,

folgendes Problem. Ich habe ein Programm in VBA geschrieben was spezielle Textdateien auswerten, da das sehr langsam ist möchte ich es auf C# portieren. (Mit anderen Worten unter VBA funktioniert alles). Allerdings wünsche ich mir eine schnelle Stand-alone Anwendung.

Jedoch habe ich bei C# Probleme bei der Ein- und Ausgabe. Ich weiß wie ich Texte ein- auslesen kann jedoch geschieht das statisch, mit anderen Worten die ein- auszulesende Datei ist im Code hardcodiert.

Ich möchte jedoch eine dynmische Variante haben. Das Programm soll eine Konsolenanwendung sein, die ich per Doppelklick aktiviere.
Beispielsweise soll die Datei „Text.msc“ oder „blah.msc“ per doppelklick von dem Programm abgearbeitet werden und das Ergebnis in eine Textdatei geschrieben werden (Ausgabe kann statisch sein). Der Dateiname, der einzulesenden Datei ist jedoch jedesmal ein anderer.
Es geht hier um sogenannte MSCONS-Dateien aus der Stromwirtschaft, meist Suffix msc.

Da die Dateinen oftmals sehr klein sind soll auch eine mehrfachauswahl per Explorer möglich sein. Ungefähr so wie Musicdateien die per Auswahl in einer Queue landen. Wenn natürlich mehrer Dateinen ausgewählt wurden soll das Ergebnis auch in einer Ausgabedatei angehängt werden.

Beispiel: Ich selektiere 5 Dateien per Doppelklick, diese werden abgearbeitet und das Ergebnis der 1 Datei wird in eine Textdatei geschrieben. Die Ergebnisse der anderen 4 Dateien werden einfach an die existierende Datei angehängt.

Mein Problem hierbei ist die Umsetzung, ich weiß nicht wie die selektierten Dateien an das Programm übergeben werden.

Ich hoffe die Crackz finden Gefallen an dem Problem oder haben es bereits schon gelöst.

Hallo Marco,

folgendes Problem. Ich habe ein Programm in VBA geschrieben
was spezielle Textdateien auswerten, da das sehr langsam ist
möchte ich es auf C# portieren. (Mit anderen Worten unter VBA
funktioniert alles). Allerdings wünsche ich mir eine schnelle
Stand-alone Anwendung.

Warum bleibst du nicht bei VB? Sollte unter .NET keinen Unterschied machen ob du c# oder VB nimst. Und für den Umstieg ist es bestimmt einfacher. Zumindest solange du „alleine“ bist…

Jedoch habe ich bei C# Probleme bei der Ein- und Ausgabe. Ich
weiß wie ich Texte ein- auslesen kann jedoch geschieht das
statisch, mit anderen Worten die ein- auszulesende Datei ist
im Code hardcodiert.

Warum das eine Konsolenanwendung werden soll must du mal erklären. Ansonsten:

Aus c# kannst du den Standard Dateiauswahldialog verwenden, den „jeder“ kennt. Den kann man mit einem Dateifilter (hier *.msc) vorbelegen. Auch ein fixer Pfad geht natürlich, und wenn man will liest man einfach mal den Standardpfad und fragt nur ob das so ok ist …
Analog fürs Speichern: Standarddialog, Pfad etc.

Der Geschwindigkeit dürfte es egal sein (Hat da jemand Erfahrung?) ob Konsole oder Fenster, abgesehen von dem Bedarf für das Fenster selber, das sollte aber nicht ins Gewicht fallen.

mfg

Dirk.Pegasus

Hallo!

Das Ganze ist sehr einfach zu lösen:
In C# hast Du ja die statische Methode Main als Einsprungpunkt in jedes Programm. Diese Methode hat entweder die Signatur void Main() oder die Signatur int Main(string[]). In der zweiten Version bekommt Main ein string-Array als Parameter, das zur Laufzeit dann die Aufrufargumente enthält.
Um daher beliebig viele Dateien als Eingabe nutzen zu können, kannst Du einfach sowas schreiben:

class MyProg
{
 public static int Main(string[] args)
 {
 if (args.Length == 0)
 {
 Console.WriteLine("Bitte mindestens eine Datei als Argument angeben!");
 return -1;
 }
 // Das ist die Klasse, die die eigentliche Arbeit macht...
 Worker worker = new Worker();
 foreach (string file in args)
 {
 worker.DoSomethingWithFile(file);
 }
 return 0;
 }
}

Im „richtigen Leben“ natürlich noch mit ein bisschen mehr Fehlerbehandlung, aber ich glaube, das Prinzip wird klar.

Gruß,
Martin

Vielen Dank erst einmal für die schnelle Antwort. Der Grund für eine Konsolenanwendung ist, dass ich es vermeiden möchte noch etwaige Interaktionen zu programmieren. Sprich es soll eben kein Fenster auf gehen wo es ein Feld gibt öffne Datei; speichere Datei unter usw.

Der Grund warum ich C# wähle ist, dass ich das ganze unter Excel in VBA programmiert habe. Die Ein und Ausgabe ist in Excel jedoch anders als in VB. In Excel kann ein „Filename=Application.GetOpenFilename“ mir die Datei öffnen. In VB funktioniert das allerdings anders, und ich ging irrerweise davon aus das könnte genau so funktionieren.

Ich benötige für das implementieren von Ein und Ausgabeaktionen proportional mehr Zeit als für die eigenteliche Hauptaufgabe.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Martin,

vielen Dank für diese Antwort. Ein Freund hat mir am Wochenende das auch so bestätigt. Ich werde es wohl gleich einmal ausprobieren.

Danke nochmals!

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]