Matrizen aus Datei einlesen



  • Hallo Zusammen 🙂

    Ich schreibe derzeit an einem Programm und bin auf folgendes Problem gestoßen, bei dem ich eine möglichst elegante und einfache Lösung suche:

    In zwei seperaten Dateien mit Suffix txt ist jeweils ine Matrix der Form:

    1 2 3 4 5
    6 7 8 9 10
    11 12 13 14

    gespeichert.Für jede beliebige Größe kann ich die Anzahl der Zeilen und Spalten der Matrizen ermitteln und die Matrizen zeilenweise ausgeben lassen.
    Das Problem ist nun aber folgendes.Ich möchte mit den Matrizen rechnen können weshalb ich sie als ein zweidimensionale Integer Array laden möchte, da die Matrizen aber als Strings eingelesen werden, werden auch die Leerzeichen und Zeilenumbrüche mitgelesen.

    Wie kann ich die Werte in den Matrizen der Reihe nach in die Arrays laden ? Die Umwandlung von String zu Integer geht mit der "atoi" Funktion, dass habe ich herausgefunden, aber wie gesagt ist mir keine gescheite Herangehensweise eingefallen, wie ich dieses Problem möglichst einfach lösen könnte.

    Bin für jede Hilfe dankbar, 😉

    vG isbn



  • hi
    mit fscanf kannst du die zahlen direkt in int variable einlesen



  • isbn schrieb:

    Ich möchte mit den Matrizen rechnen können weshalb ich sie als ein zweidimensionale Integer Array laden möchte, da die Matrizen aber als Strings eingelesen werden, werden auch die Leerzeichen und Zeilenumbrüche mitgelesen.

    Da auch in den Leerzeichen, Zeilenumbrüchen und Dateiende Informationen stecken, musst Du sie ebenfalls lesen, wenn Du nicht vorher mit Sicherheit die Dimension der Matrix und die Korrektheit der Darstellungen kennst.

    Ich gehe mal davon aus, dass Du im Allgemeinen erst durch die Struktur der Datei die Anzahl der Spalten und Zeilen erfährst. Deshalb würde ich die Datei zeichenweise in ein für eine Zahl immer ausreichendes char[] einlesen und jeweils bei Leerzeichen oder Zeilenumbrüchen reagieren.

    In dieses char[] wird dann solange eingelesen, bis ein Leerzeichen, Zeilenumbruch oder Dateiende kommt. (Test auf Maximallänge nicht vergessen, ggf. Alarm bei unzulässigen Zeichen.)

    Solange Du in der ersten Zeile liest, bestimmt die Anzahl der gelesenen Zahlen die Spaltenzahl. Beim Lesen in den weiteren Zeilen zählst Du nochmals, um sicherzustellen, dass die Spaltenzahl gleich bleibt.
    Erreichst Du das Dateiende, muss die Spaltenzahl auch noch stimmen, aber dann weißt Du auch die Zeilenzahl.

    Da Du zu Beginn die Dimension der Matrix nicht kennst, würde ich die Zahlen nacheinander in ein eindimensionales int[] ausreichender Größe (Test auf Maximalgröße nicht vergessen) übertragen. Nach dem Erkennen des Trennzeichens würde ich den Wert aus dem char[]-puffer also mit atoi in das nächste Element.

    Erst zur Laufzeit, am Ende der ersten Zeile kennst Du die Spaltenzahl, so dass man die Mehrdimensionalität nicht schon dem Compiler überlassen kann.
    Das Element a(i,j) der Matrix steht dann im Array bei element[(i-1)*spaltenanzahl+(j-1)].

    Ciao, Allesquatsch



  • zeh proviech schrieb:

    hi
    mit fscanf kannst du die zahlen direkt in int variable einlesen

    Oh Mann 😃 Hat super funktioniert soweit, danke dir ! Ich hab im Galileo Openbook nach geeigneten Funktionen gesucht, aber nicht gefunden ... Danke noch einmal 🙂 👍


Log in to reply