[C/C++] C - gets, fgets, getline, fread? zeilenweise einlesen.

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Mazen2004, 20. Mai 2012 .

  1. 20. Mai 2012
    Zuletzt bearbeitet: 20. Mai 2012
    C - gets, fgets, getline, fread? zeilenweise einlesen.

    heyho,

    ich versuche an den datenbereich eines pgm files zu kommen.

    Spoiler
    pgm file beschreibung: Portable Anymap – Wikipedia

    Ich hab ja davor diese ganze Beschreibung und Kommentar Zeilen.
    Da ich nicht weiß wie viele Kommentarzeilen es gibt, kann ich nicht einfach auf eine bestimmte line springen.

    Einlesen würde ich mit gets oder fgets oder getline von gnu. Was eignet sich am Besten? (Galileo Computing :: C von A bis Z – 16.16 Zeilenweise Ein-/Ausgabe von Streams)

    Erstmal fange ich erst ab zeile 2 an, weil in zeile 1 nur P5 steht.
    Ich müsste dann ja irgendwie auf Kommentarzeilen checken also auf # am Anfang der Zeile. Wenn das nicht der Fall ist kommen noch 2 Zeilen bis zum Datenbereich...

    Und wie frage ich sowas in C ab xD? Gibts da so etwas wie regex?


    EDIT

    Ok ich habe eine Lösung gefunden xD.... jetzt komme ich aber mit gets, fgets und getline nich zurecht... was benutze ich am Besten und wie wird es benutzt :/ das galileo buch bringt mich nich wirklich weiter -.-"

    gets soll man nicht benutzen. Weils zu nem bufferoverflow führen kann.
    fgets muss man die zeichenlänge angeben? Welche Zeichenlänge? Von der Zeile? Weiß ich doch aber gar nicht wie lange eine Zeile ist?
    und was ist mit getline?
    Und was macht fread? oO
     
  2. 20. Mai 2012
    AW: pgm file datenbereich bearbeiten :/

    Hast du dir mal die verlinkten Seiten angesehen?

    PGM Format Specification
    Libnetpbm manual

    Vielleicht reicht dir die Funktionalität der Library ja schon?
     
  3. 21. Mai 2012
    AW: C - gets, fgets, getline, fread? zeilenweise einlesen.

    Bei fgets gibst du an wieviel Zeichen maximal eingelesen werden dürfen, quasi als Schutz dass du aus deinem Char-Array nicht herauskommst.

    Hattest du schon überladene Operatoren?
     
  4. 22. Mai 2012
    AW: C - gets, fgets, getline, fread? zeilenweise einlesen.

    So wie ich es verstehe, willst du das Binärformat lesen, oder? Da gibt's kein Konzept von "Zeilen".

    Wenn du es Quick&Dirty willst: fscanf() mit "P5 %d %d %d". Das liest dir den Header ein, skippt alle Whitespaces dazwischen und setzt den Filepointer direkt an den Whitespace vor den Daten. Dann kannst du ein Array anlegen, das groß genug ist die Daten zu halten, und liest alles auf einmal mit fread() (fgets() ist nicht für Binärdaten gedacht) ein.
     
  5. 22. Mai 2012
    AW: C - gets, fgets, getline, fread? zeilenweise einlesen.

    ich würde fgets nehmen. mit fgets kannst du entweder angeben wie viele chars du auf einmal einlesen willst oder er liest einfahc solange bis es zum zeilenumbruch kommt.

    einfach ne while schleife nehmen und zeile für zeile einlesen. die eingelesenen zeilen müssen aber noch gecastet werden weil du nur eine zeichenfolge auslesen kannst.



    mfg allstar
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.