Importer:Error:WasEmpty



  • Hallo!

    Ich weiß leider nicht wie ich an die Aufgabe rangehen soll:
    Es geht darum eine Binärdatei einzulesen die eine Reihe von Pascal-Strings enthält.
    Bsp.:
    length H A L L O
    5(int) 48(char) 41(char) 4c(char) 4c(char) 4f(char)

    Nach dem einlesen sollen die einzelnen Strings in eine Textdatei geschrieben werden also mit fopen() und fclose() .

    Bin sehr dankbar wenn mir jemand helfen kann.


  • Mod

    Wie ist der int gespeichert? Menschenlesbar oder direkt im Binärformat des Computers?

    edit: Ach, dummer ideone-Editor. Ich hatte gerade ein komplettes Beispiel da drin programmiert, dann verwirft der der letzten Zeile plötzlich alles wegen eines Bugs. Tut mir leid für dich, aber ich habe gerade nicht die Zeit und Lust, das noch einmal zu machen.



  • Bei einem Pascal-String ist die Länge normalerweise ein Byte.



  • Hi. ja genau also zu Beginn steht die Anzahl der in der Datei vorhandenen Pascal Strings Datentyp int (menschenlesbar)

    int Anzahl der in der Datei vorhandenen Pascal-Strings
    int length1 - Länge des ersten Pascal-Strings
    char[length1] 1. Pascal-String
    int length2 - Länge des zweiten Pascal-Strings
    char[length2] 2. Pascal-String

    usw..

    oh danke seppj ja das ist schade 😞 ... ich weiß nicht ich komm da einfach nicht dahinter mit dem pascalstring
    ich hab mich jetzt an 3 kleinen Programmen versucht Datei schreiben Datei lesen (nur text) und das funktioniert aber bei der aufgabe wird mir mein Programmier-anfängerdasein zum Verhängnis 😞
    Lg



  • In der Aufgabenstellung steht, dass du binaer lesen sollst; du schreibst, dass du Text liest; das ist schon mal falsch.
    Am besten, du liest zeichenweise(byteweise) ein, und speicherst in ein char[256];
    Das kannst du gut in 2 Funktionen aufteilen, die eine liest (einen kompletten Pascalstring), die andere schreibt ihn in eine Datei.
    Das Ganze bis zum Ende der Quelldatei.

    @Mods: kann hier irgendjemand mal diesen oberhaesslichen Umlautbug entfernen; das kann doch wohl nicht so schwierig sein

    int lies(FILE *f,char *s)
    {
      int c,x;
      if( (c=fgetc(f))!=EOF ) /* ein Byte = Laenge lesen */
      {
        while( c-- )
          if( (x=fgetc(f))!=EOF )
            *s++=x;  /* (Pascal)Zeichen in C-String schreiben */
          else
            return 0;
        *s=0;  /* Stringende definitiv setzen */
        return 1;
      }
      return 0;
    }
    
    int main()
    {
      FILE *f=fopen("bla.bin","rb");
      char s[256];
      while( lies(f,s) )
        puts(s);
      fclose(f);
      return 0;
    }
    


  • Hallo Wutz!
    Danke für deine Antwort aber das ist ja grad mein Problem ich bekomm das nicht hin und da ich Anfänger bin hab ich es deshalb mal "einfach" mit text versucht da ich das mit dem Pascal string noch nicht geschafft habe ..
    Lg



  • Textdateien, also solche, bei denen \n eine spezielle Rolle spielt, oeffnet man in C ueblicherweise mit fopen(..."r"), alle anderen mit fopen(..."rb").
    Hast du die Datei erstmal im richtigen Modus geoeffnet, kannst du nach Belieben alle vorhandenen Funktion, die mit FILE* umgehen koennen, anwenden:
    - einzelne Zeichen lesen
    - Zeilen lesen
    - Bloecke lesen
    - formatiertes Lesen
    ...



  • Hallo Vielen Dank einmal das einlesen und in String schreiben ist mir jetzt schon viel klarer !!

    jetzt hab ich noch eine Frage wie ich mir den String ansehen kann ? puts(s) sollte den String ja auf stdout schreiben oder ? Lg



  • Ja.
    Oder wenn dich das automatische '\n' bei puts stört, dann nimm fputs(s, stdout);

    Oder printf("%s\n", s); (puts gefällt mir besser)

    Oder im Debugger.



  • alles klar danke



  • Hallo also wenn ich den oben gegebenen code mit einer binärdatei welchen einen pascalstring enthält ausführe liefert es mir keinen output ?! 😕 Lg


Anmelden zum Antworten