Zeilen und Spalten aus Datei auslesen



  • 3Laura3 schrieb:

    Und hier meine Frage: Gibt es einen einfacheren Weg bestimmte Zeilen und Spalten einzulesen als ich es in dem untenstehenden Code getan habe?
    Im untenstehenden Code habe ich Daten mit nur 4 Spalten. Allerdings muss ich bald auch Daten mit 50 Spalten oder mehr einlesen, was mit meiner Methode doch sehr umständlich erscheint.

    double d[4]; und eine Schleife. Die kannste dann aufmotzen zu 50 statt 4 ohne nennenswerten Aufwand.

    3Laura3 schrieb:

    Zudem will ich eigentlich nur bestimmte Spalten, z.B Spalte 4 bis zur letzten Spalte, einlesen.

    "lesen" musst Du alle. Ignorieren geht nur durch "weglesen" in eine dummy-Variable. Es kann daher auch einfacher sein, alle ins Array zu lesen und die nützlichen Daten ins Ziel zu kopieren.



  • Hallo Laura,

    3Laura3 schrieb:

    Auch ist es mir nicht möglich folgende Sachen in mein Programm zu integrieren:

    #include <iostream>
    #include <fstream>
    #include <vector>
    #include <limits>
    

    weil mein Tool auf einem externem Server laufen wird und ich dort nichts zusätzliches hochladen kann.

    Ein #include <irgendwas> hat zunächst mal nichts damit zu tun, wo Dein ausführbares Programm später läuft. Du hast sowohl unter C als auch unter C++ die Möglichkeit Libraries statisch zu binden. Damit wird dann ein File (unter Windows z.B. ein .exe) beim Generieren erzeugt, welches autark läuft. Hauptsache das Betriebssystem passt.
    Bem.: Ein 'include' ist selbst zunächst mal keine(!) Library, aber i.A. wird zusätzlich zum include eine Library benötigt.

    Wie kommst Du zu dieser Information, dass ein #include <iostream> usw. für Dich nicht in Frage kommt?

    Gruß
    Werner



  • Wenn der Inhalt einer Zellen eine feste Groesse hat kannst du aus der Datei auch direkt bestimmte Sachen auslesen und den Rest ueberspringen.



  • Vielen Dank für die schnellen Antworten!!! Ich soll meinen Code jetzt doch in C lassen. Dann poste ich diesen Beitrag nochmal in einem anderen Forum.



  • Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (alle ISO-Standards) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wenn die Anzahl der Spalten immer gleich ist (sein muss), kannst du fscanf benutzen, wenn nicht dann musst du zeilenweise lesen (z.B. fgets) und danach jeweils die als String gelesene Zeile elementweise auswerten (mit sscanf,strtok,oder manuell).



  • Vielen Dank! Es hat funktioniert.



  • Mein naechstes Problem ist, dass ich eine Datei auslesen moechte in der ein mittels base64 encoded Bild abgespeichert ist.
    Im Moment sieht mein Code folgendermassen aus:

    char line3[2000000];
    char buf[1000];
    FILE *fpimage;
    sprintf(buf,"./converted.txt");
    if(VERBOSE==YES) printf("Opening file: %s\n",buf);
    fpimage=fopen(buf,"r");
    if(fpimage==NULL){
    printf("mainc cannot open file %s!\n,buf"); fflush(stdout); system("sleep 1"); exit(1);
    }
    while((fgets(buf,500000,fpimage)) !=NULL){
    sprintf(line3,"%s\n",fgets(buf,500000,fpimage));
    rpPutString(io,"output.image(curden).current",line3,RPLIB_APPEND);
    }
    fclose(fpimage);
    

    Dieser Code funktioniert aber leider nicht.



  • Du liest doppelt ein.
    Lösung:

    sprintf(line3,"%s\n", buf);
    

    Und wieso übergibst du bei fgets 500000 als Größe, wenn dein Puffer 'buf' nur 1000 groß ist???
    Und line3 mit 2MB zu definieren ist wohl auch etwas groß (hat dein System überhaupt soviel Stackspeicher?).
    Du solltest dich auch fragen, ob du line3 überhaupt benötigst (so kopierst du einfach nur sinnlos den String nochmals um)?



  • Vielen Dank!
    Es funktioniert jetzt. Ich werde den Rest des Programms mit deinen Tips ueberarbeiten. Die unterschiedlichen Groessen kommen daher, dass ich mich mit C nicht all zu gut auskenne. Da ist mit wohl ein Fehler unterlaufen.
    Danke!


Anmelden zum Antworten