[C] Wort in .csv Datei suchen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von s1nu, 20. März 2014 .

Schlagworte:
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 20. März 2014
    Zuletzt bearbeitet: 20. März 2014
    Hallo Jungs,

    brauch bitte mal wieder eure Hilfe, um das Folgende elegant zu lösen.

    Ich möchte gerne ein csv file auf ein bestimmtes Wort durchsuchen lassen..

    Der Hintergrund zu dem Anliegen ist der, dass ich das File stündlich runterladen lasse und immer die Temperatur in Salzburg ausgelesen werden soll. Hierfür würde ich nach Salzburg suchen und und anschließend mit fgetpos die Position speichern, sodass ich nach dem ersten Mal direkt mit fsetpos von dort starten kann um die Temperatur erneut auszulesen. Das Ganze spielt sich natürlich in nem Endlosautomaten ab. Das hab ich schon alles, jedoch brauche ich noch ne elegante Lösung, um das Wort in dem File zu finden.

    Ist vermutlich nix dahinter, aber ich benötige trotzdem eure Hilfe.

    Freue mich auf jegliche Rückmeldung, die mir hilft.

    Grüße,
    ich
     

  2. Anzeige
  3. #2 20. März 2014
    AW: [C] Wort in .csv Datei suchen

    regex heißt das zauberwort
    http://www.lemoda.net/c/unix-regex/index.html
     
  4. #3 20. März 2014
    AW: [C] Wort in .csv Datei suchen

    Wenn man davon ausgeht, dass die Datei bereits als char Array geladen wurde sollte strncmp helfen.
    //edit: Zu lahm. Die Lösung von Decryptor kommt jedoch nicht ohne Drittanbieter Libs aus. Regex gehört erst bei C++ zum Standard.
     
  5. #4 22. März 2014
    AW: [C] Wort in .csv Datei suchen

    Da ich gerade wach geworden bin und mein asoziales Selbst noch nicht ganz wach ist:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    void cache_set_pos(int pos);
    int cache_get_pos(void);
    
    int main()
    {
     const char *WORD_TO_FIND="Salzburg";
     int old_temp_pos = cache_get_pos();
     FILE *temps = fopen("TEMPARATUR.CSV", "r");
     char buf[512] = {0}, c=0; int i=0; // buffer, aktuelles zeichen, buffer-offset sowie main() rückgabewert
    
     enum {lf_kw, lf_temp, end} flags = lf_kw; // flags: suche nach keyword, temparatur oder ende
    
     if(pos != -1)
     {
     fseek(temps, pos, SEEK_SET);
     }
    
     while(EOF != (c=fgetc(temps)) || flags == end)
     {
     if(i == 511 && c != ';') // 511 langes keyword, csv tabelle mögl. fehlerhaft
     { 
     i=-1;
     break;
     }
    
     if(c == ';')
     {
     buf[i + 1] = 0;
    
     if(flags == lf_kw && 0 == strcmp(WORD_TO_FIND, buf))
     {
     cache_set_pos(ftell(temps) - i);
     flags = lf_temp;
     }
     else if(flags == lf_temp)
     {
     printf("%s\n", buf); // temparatur
     flags = end;
     }
    
     i=0;
     }
     else
     {
     buf[i++] = c;
     }
     }
    
     fclose(temps);
     return i;
    }
    
    void cache_set_pos(int pos)
    {
     FILE *cache = fopen("TEMPARATUR.CACHE", "wb");
    
     fwrite(&pos, 4, 1, cache);
     fclose(cache);
    }
    
    int cache_get_pos(void)
    {
     FILE *cache = NULL;
     int pos = -1;
    
     if(NULL != (cache = fopen("TEMPARATUR.CACHE", "rb")))
     {
     fread(&pos, 4, 1, cache);
     fclose(cache);
     }
    
     return pos;
    }
    Code ist natürlich nicht optimal und man kann es auf jedenfall schöner machen, aber so sozial bin ich dann auch wieder nicht, wenn es hier um Hausaufgaben geht. Alles was du siehst ist ungetestet, kann also sein das ich hier und da einen Syntaxfehler eingebaut habe.
     
  6. #5 22. März 2014
    AW: [C] Wort in .csv Datei suchen

    vllt mit einem ganz anderen ansatz:
    OpenWeatherMap free weather API
    dann musst du nich immer n file runterladen, sondern kriegst direkt nur die infos, die du brauchst und kannst dann mittels json oder xml parser leicht die nötigen werte rausziehen.
     

  7. Videos zum Thema
Die Seite wird geladen...