Umlenkung in C Programmen?

...komplette Frage anzeigen

6 Antworten

du kannst natürlich mit

system( "Linux-Befehle" );

solche Befehle auch in C verwenden. Das sollte aber die letzte Möglichkeit sein.

Eleganter ist es aber wirklich die Elemente von C
fopen, fread, fseek, getline, fwrite , fclose ....
zu benutzen.

Hier den C-Code als Antwort zu schreiben, ist wohl doch etwas zu viel.
Schließlich müssen auch Fehleingaben, Dateifehler und viele andere  Dinge behandelt werden. Da kommen schnell mehrere 100 Zeilen zusammen.

Eigentlich hilft da nur C lernen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DAUUSER
24.05.2016, 17:44

Da bin ich ja gerade dabei (also C zu lernen) ich will nicht das mir jemand alles vorkaut, aber irgendwie hänge ich an dem Problem fest.

0

Tut mir leid,

  • ich habe deine Frage gelesen,
  • ich verstehe nicht, was du willst und
  • ich bin sicher, es liegt nicht an mir sondern an deiner Fragestellung

Präzisier doch nochmal, z.B. anhand eines Beispiels genau was du möchtest. Welches Verhalten soll dein Programm haben?

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DAUUSER
24.05.2016, 16:41

Ich habe ein C-Programm mit dem man alphabetisch Strings sortieren [Stacks nach dem LIFO- Prinzip] kann und möchte z.b mit einer .txt oder alternativ mit .dat , Strings einlesen(+) bzw. entferen(-).

In der der Datei steht

+ Name1   
- Name2

Aber dies möchte ich mit dem Terminal in Ubuntu einlesen können (Umleitung der Eingabe mit <)

0

Umlenkung brauchst du im Grunde genommen nicht, wenn du realisierst, daß die Standard-Kanäle Eingabe, Ausgabe, (Fehler-)Meldungen Ziffern zugeordnet sind ... m.W. 0, 1, 2 (in obiger Reihenfolge) ... aber das ist auch nicht wichtig, da diese Deklarationen Standard sind:

  • Read ... liest von der Konsole
  • Write ... schreibt auf den Bildschirm
  • Meldungen (im Normalfall ebenfalls auf die Konsole)

Wenn du die Datei - die gelesen werden soll - als 1. Parameter angibst, sollte die dem Eingabe-Kanal zugeordnet werden ...

Wenn das nicht automatisch passiert, solltest du so vorgehen, wie "tgel79" geschrieben hat ...
mit der Ergänzung, daß die Reihenfolge der Parameter (beim Aufruf) mit der Formulierung

argv[2]

mit dem 2. Parameter korrespondiert.

Aber wie gesagt, Umleitungen sind da nicht zwingend!

Wenn du mehr darüber wissen willst, probiere mal

sort < EingabeDatei >AusgabeDatei

Wenn du - im obigen Beispiel - das Ende, also den 2. Parameter weg läßt, erscheint die sortierte Liste auf dem Bildschirm.

Das Programm "sort" ist ja OpenSoftware ... also kannst du dir die Quelle dazu ansehen!

Deine Programme kannst du dann analog aufbauen ... oder eine Kopie von "sort" mit anderer Verarbeitung ... warum das Rad immer wieder neu erfinden?

Antwort bewerten Vielen Dank für Deine Bewertung

Oder aber:
Du übergibst den Dateinamen als Parameter ab das Programm:
deinProgramm birnen.txt
Im Code so auszulesen:
int main(int argc, char *argv[]){
printf("%s", argv[1]);
}

Tutorials zum File IO mit C gibt es hier: http://www.tutorialspoint.com/cprogramming/c_file_io.htm
Im Grunde kannst du mit fopen einen Stream öffnen und den dann mehr oder weniger wie den normalen Output lesen und schreiben.

Antwort bewerten Vielen Dank für Deine Bewertung

Vielleicht könnte dich die Pipe interressieren.
Die Pipe (|) leitet die Standartausgabe des Proramms links von ihr in die Standarteingabe von dem auf der rechten Seite.
Beispiel:
cat apfel.txt | less
Dies gibt die Ausgabe von cat apfel.txt (den Inhalt der Datei) an less weiter. Less zeigt die Datei nun an und ermöglicht es in ihr Sachen zu suchen etc..

Bei Fragen fragen.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von DAUUSER
24.05.2016, 16:56

Danke für die Hilfe, aber wie schon geschrieben würde ich gerne wissen wie man in einem C-Programm es so realisiert kann, das eine .txt von außen (Terminal bzw. Windows Shell) in das C-Programm einlesen kann.

0

Okay ich mach es spezifischer: cat datei.txt | deinC-Programm

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von 3v1lH4x0R
24.05.2016, 18:55

Dann im Programm einfach normal Input auslesen wie vom Nutzer.

0

Was möchtest Du wissen?