Auslesen einer .sdk Datei?



  • Hallo, ich hoffe mir kann jemand helfen, denn ich verzweifle gerade an einer Programmieraufgabe.

    Es geht darum, dass ich eine Datei mit der Endung .sdk auslesen soll.
    Öffne ich die .sdk Datei indem ich sie einfach in .txt ändere so sehe ich die Werte die ich auslesen muss.
    Dabei handelt es sich um eine 9x9 Matrix also 9 Zeilen und 9 Spalten mit Zahlen von 0-9 (nicht binär dargestellt sonder dezimal).

    123456789
    592689712
    256158124
    ...

    Nun ist mein Problem das ich Zeile für Zeile und Zahl für Zahl durchgehen muss. Ich muss also alle der 81 Zahlen
    einzelnd auslesen und einem Array zuweisen.

    mit fscanf lese ich leider eine komplette Zeile aus und mit fread bin ich überfragt, da ich ja eine größe in Byte angeben
    muss die Zahlen aber nicht in binär in der datei stehen.

    Würde mich über eure Hilfe sehr freuen!


  • Mod

    scanf kann viel mehr als dir anscheinend bekannt ist. Guck dir mal eine Referenz des Formatstrings genau an. Hier böte sich die Benutzung einer Längenangabe an, dann verarbeitet scanf nur eine vorgegebene Anzahl Zeichen, hier also 1.



  • int main()
    {
      int i;
      char s[82]="";
      FILE *f=fopen("test.sdk","r");
      for(i=0;i<9;++i)
        if(1!=fscanf(f,"%9s",s+9*i)) perror("Lese/Format-Fehler"),exit(1);
      fclose(f);
      puts(s);
      return 0;
    }
    


  • Reicht das denn?

    sdk kann komplexer sein: http://www.sadmansoftware.com/sudoku/faq19.php



  • Ja danke ich habs jetzt hinbekommen - klasse Hilfe! 😉

    Nun muss ich lediglich eine letzte Sache implementieren, bin aber etwas verwirrt. Ich soll verschiedene .sdk-Files Auswählen können und anschließend Auslesen. Das Auswählen der .sdk wurde bereits in der main.c vorgegeben - lediglich das Auslesen der Datei musste ich selbst programmieren.

    Nun habe ich zu Testzwecken einfach beim Einlesen der Datei einen bestimmten Namen einer dieser .sdk-Files ausgewählt. Nun soll es aber für jedes x-beliebige funktionieren.

    Meine Funktion bekommt einen Parameter a geliefert, den die Funktion als int aufnimmt (alles bereits vorgegeben - nicht von mir erstellt). Als Kommentar steht dort:
    int a
    Bedeutung: Dateiname
    Beschreibung: Zeiger auf Zeichenkette (mit(char*)umwandeln)

    Ich habe etwas herumprobiert, jedoch ohne Erfolg ...


  • Mod

    Die meinen so etwas wie:

    void deine_funktion(int dateiname)
    {
      FILE *datei = fopen((const char*) dateiname);
    }
    

    Das kann unter einigen bestimmten Umständen funktionieren. Allgemein ist das jedoch allergrößter Schrott und in vielen Fällen wird es einem ins Gesicht explodieren. Ich hoffe für dich, dass
    1. Der Aufgabensteller sicher gestellt hat, dass die nötigen Umstände auch tatsächlich gegeben sind.
    2. Du dir diese Technik nicht abguckst. Am besten lernst du gar nichts mehr von diesem Lehrer.


Anmelden zum Antworten