Vollständige Version anzeigen : [C] Wort in .csv Datei suchen


s1nu
20.03.2014, 15:59

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

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Decryptor
20.03.2014, 16:32

regex heißt das zauberwort
(;;;lemoda~net/c/unix-regex/index;html)


MasterJulian
20.03.2014, 16:33

Wenn man davon ausgeht, dass die Datei bereits als char Array geladen wurde sollte strncmp (;;;cplusplus~com/reference/cstring/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.


terraNova
22.03.2014, 02:50

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

#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.


Prrovoss
22.03.2014, 16:56

vllt mit einem ganz anderen ansatz:
OpenWeatherMap free weather API (;openweathermap~org/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.


Ähnliche Themen zu [C] Wort in .csv Datei suchen
  • [C/C++] Hilfe bei Suchen in Datei
    Hallo. Ich habe ein Problem. Ich habe ein Adressbuch programmiert, habe die Einträge (wie z;B Name, Adresse, Telefonnr. usw.;) in einer Datei speichern lassen und nun möchte ich in der Datei z;B nach dem Eintrag "Name" suchen lassen. Wollte versuchen es mit fread und fwrite zu machen nur habe [...]

  • [C/C++] strings aus datei suchen in externe datei speichern und abrufen
    Hi, ich bin verzweifelt auf der Suche nach Hilfe um folgendes zu lösen: 1. datei XYZ "öffnen&einlesen" / initialisieren 2. jede Zeile einzeln, bis auf ersten 7 Zeichen und bis zum nächsten "/"-Zeichen in externe datei speichern 3. jede zeile aus externer datei als array-element initialis [...]

  • Wort suchen und farblich hinterlegen
    Hallo, folgendes: habe eine Tabelle die includiert wird (von einer anderen Seite) über CSS und so kann man die Tabellen-Zellen auch ansprechen. Jetzt eine Frage: gibt es eine Möglichkeit ein bestimmtes Wort suchen zu lassen, um dieses Wort oder am besten die Zelle in der das Wort ist irgendw [...]

  • [C/C++] Wort im String prüfen/suchen
    Hallo, es ist etwas blöd und mir euch persönlich peinlich, aber ich habe irgendwie das Problem ein wort in einem String zu suchen bzw. zu prüfen. Kann mir bitte einer kurz schreiben wie ich prüfen kann ob das Wort im String vorhanden ist oder nicht. Danke. [...]



raid-rush.ws | Imprint & Contact pr