(In C) Datei zeilenweise durchgehen


Buba235

Erfahrenes Mitglied
Hallo Leute!

Ich schein gerade ein Brett vorm Kopf zu haben. Zumindest check ich grad nicht mehr wie ich eine Datei Zeilenweise durchlaufen kann und dabei immer nur den String der zwischen dem 3ten und 4ten Komma liegt in einen Puffer schreiben kann. Ich weiß dass es eigentlich eine Kleinigkeit ist, aber ich bin echt am Verzweifeln. Hier mal mein Code:

Code:
void datei_ausgeben(FILE *datei) {

        /*Variablen*/
        char c, zeichen;
        char buffer[1024];
        int gelesene_Kommas = 0;

        /*Datei zum Lesen oeffnen*/
        datei = fopen("/home/tracer/wlan_DB/alert_files/Textdatei.txt", "rt");
        if (datei == NULL) {
                fprintf(stderr, "Fehler beim Oeffnen der Datei zum Auslesen!\n");
                exit(EXIT_FAILURE);
        }
	
        Hier liegt mein Problem - Ich checks nicht!
        while((zeichen = fgetc(datei)) != EOF) {
                /*Kommas zaehlen*/
                while(gelesene_Kommas != 3) {
                        if (fgetc(datei) == ',') {
                                gelesene_Kommas++;
                        }
                }

                /*Solange kein Komma Zeichen einlesen / Kommas wieder mit 0 belegen*/
                gelesene_Kommas = 0;
                while((c = fgetc(datei)) != ',') {
                        gelesene_Kommas++;
                        buffer[gelesene_Kommas - 1] = c;
                }
                printf("%s\n", buffer);
                zeichen++;
        }

        /*Datei schliessen*/
        fclose(datei);
}

Wäre nett, wenn ihr mir da mal schnell helfen könntet. Ich gebe buffer nur aus, um zu überprüfen, ob er alles richtig gemacht hat. Später aber muss ich buffer noch verarbeiten (in ne Datenbank schreiben). Das ist aber nicht so wichtig im Moment. Ich möchte nur bei jeder Zeile dieser CSV Datei (und die hat enorm vile Zeilen) immer diesen bestimmten String ausgeben. Für jede Hilfe bin ich dankbar!
 

RedWing

Erfahrenes Mitglied
Hallo,

schaumal hier:

C:
#include <stdio.h>
#include <string.h>

#define LINE_SIZE 1024

int main(){
    FILE* fd = fopen("test.csv", "r");
    char line[LINE_SIZE];
    char* delim = ",";
    char* word = NULL;
    int i = 0;
    while(fgets(line, LINE_SIZE, fd) != NULL){
        word = strtok(line, delim);
        for(i = 0; word != NULL; i++){
            if(i == 3){
                printf("%s\n", word);
                break;
            }
            word = strtok(NULL, delim);
        }
    }
    fclose(fd);
    return 0;
}

Siehe dazu auch:
http://www.cplusplus.com/ref/cstring/strtok.html
http://www.cplusplus.com/ref/cstdio/fgets.html

Gruß

RedWing
 
Zuletzt bearbeitet:

Buba235

Erfahrenes Mitglied
Hallo!!

Danke es funktioniert wunderbar! Es wird alles so gemacht, wie ich das wollte. Es gibt nur noch eine Kleinigkeit. Mein Compiler spuckt mir 2 Warnungen aus (es geht auch mit den Warnungen). Nur ich möchte die gerne wegbekommen. Wie könnte ich sie am besten weg machen?

Die Warnungen kommen für die Codestücke word = strtok(line, delim); und word = strtok(NULL, delim);

Was kann ich da machen?

Ach ja ich sollte noch sagen wie die Warnungen heißen:
Also bei beiden steht da: Warnung: Zuweisung erzeugt Zeiger von Ganzzahl ohne Typkonvertierung
 
Zuletzt bearbeitet:

deepthroat

Erfahrenes Mitglied
Hi.

Du könntest dir die Warnungen zumindest einmal durchlesen und versuchen zu verstehen oder auch im Internet suchen was die Warnungen zu bedeuten haben.

Wenn du damit nicht weiterkommst könntest du es ja evlt. auch in Erwägung ziehen uns die Warnungsmeldung zu verraten wenn das nicht zuviel Umstände macht.

Gruß
 

Buba235

Erfahrenes Mitglied
Danke für den Tipp mit der String.h! Das war der Fehler! alles geht jetzt super. Danke nochmal!
 

Neue Beiträge