String Funktion

seriously

Mitglied
Funktion
char *Csv_GetCol (char *t, char *csv, char separator, unsigned col_to_get);.
Der string csv stellt die CSV-Zeile dar, Trennzeichen ist separator. Die Spalte Nummer
col_to_get soll nach t kopiert werden, wobei führende und nachfolgende white spaces entfernt
werden sollen (Unit str verwenden!) // ich habe eine Funktion, die das macht
Funktionsergebnis ist diese Spalte bzw. NULL im Fehlerfall.

Bsp.: Zeichenkette (csv): " Moser;Karl;4020;Linz"
Trennzeichen: ’;’
Spalte (col_to_get): 2
Funktionsergebnis: "Karl"
 
Code:
unsigned int *Csv_GetCol(char *t, char *csv, char sep, unsigned col_to_get)
{
   int n;
   unsigned i;
   char *rs;
   i=0;

   while (csv[i] != '\0' && csv[i] != sep)
         i++;

   n=0;
   while (csv[i] != '\0' && t[n] != '\0'){
         t[n]=csv[i];
         i--;
         n++;
   }
   t[n]='\0';
   rs=t;
   return rs;
}
ich habe das hier gemacht anhand des Beispiels - ohne Hilfszeichenkette jetzt.
Aber so kopiert er glaub ich nur die erste Spalte oder ****
 
Die Funktion soll kein unsigned int zurückgeben.
Die Variablen n und rs brauchst du nicht.

Dann, dieses Stück
C++:
while (csv[i] != '\0' && csv[i] != sep)
         i++;
"springt" zur zweiten Spalte.
Du ignorierst col_to_get komplett.

Wie du den Anfangsindex der n-ten Spalte bekommst (und dazu deine NULL-Fehlerüberprüfung noch drinhast, ob es überhaupt so viele Spalten gibt), kannst du aus dem anderen Thread aus meiner Funktion herauskopieren.
Da ier die Nummer auch nicht wirklich wichtig ist, könntest du auch immer csv erhöhen und i weglassen.

Dann kopierst du in einer while-Schleife Zeichen für Zeichen von csv nach t, bis du in csv bei sep oder '\0' ankommst.
Am Schluss fügst du zu t noch eine '\0' dazu und gibst t zurück.

Gruß
 
Code:
char *Csv_GetCol(char *t, char *csv, char sep, unsigned col_to_get)
{
    int i;
    int n=0;
    i= Csv_GetColIndex( csv, sep, col_to_get);

    if ( csv[i] == '\0'){
       return NULL;
    }else{
       while (csv[i] != sep){
             i++;
       }
       while (csv[i] != '\0' && csv[i] != sep){
             t[n]= csv[i];
             n++;
             i++;
       }
       t[n]='\0';
    }
    return t;

}
ich habs gemacht , aber es geht nicht .
 
Code:
char *Csv_GetCol(char *t, char *csv, char sep, unsigned col_to_get)
{
    int i;
    int n=0;
    i= Csv_GetColIndex( csv, sep, col_to_get);

    if ( csv[i] == '\0'){
       return NULL;
    }else{
       while (csv[i] != sep){
             t[n]= csv[i];
             i++;
             n++;
    }
     t[n]='\0';
    }

    return t;

}
 
So kann man es natürlich auch machen :D
Einziger Mangel: Die if-Bedingung sollte eher lauten: i==-1
Die Funktion überprüft das ja schon.

Gruß
 
Wie gibst du das aus?
Und mir ist doch noch was aufgefallen: In der while-Schleife musst du auch auf '\0' prüfen
 
Zurück