PDA

View Full Version : [C] confrontare stringhe e parole in un file


dj_ste
02-04-2006, 10:04
Ho un problema.
Ho un file che è strutturato in questo modo:

ciao;casa
gaia;topino
pappa;ciccia
ecc;ecc

e ho anche 2 stringhe salvate in 2 variabili distinte.
quello che devo fare è ad esempio confrontare se la stringa 1 è uguale a ciao e la stringa 2 a casa. oppure la prima stringa a pappa e la seconda a ciccio.

praticamente è come se le due stringhe che ho già salvato siano username e password e se queste due parole sono presenti nel file separate da una virgola l'utente è autenticato a fare qualcosa.

come faccio?

Fenomeno85
02-04-2006, 10:55
allora devi fare un parser del file ... ti basta inizialmente tirare su pappa;ciccia esempio poi fai una divisione della stringa e li confronti ... ci dovrebbe essere se non erro già qualche funzione nelle librerie string.h che fanno la divisione ... token qualcosa si dovrebbe chiamare ... altrimenti ti ricerchi te dove è messo il ;
Per il confronto usa strcmp ovviamente assicurati che esista il terminatore di stringa.

~§~ Sempre E Solo Lei ~§~

DanieleC88
02-04-2006, 11:14
STRTOK(3) Linux Programmer's Manual STRTOK(3)

NAME
strtok, strtok_r - extract tokens from strings

dj_ste
02-04-2006, 11:22
mmm, non ho capito molto...
per prima cosa devo caricare il file, poi come faccio a confrontare la prima riga con le due stringhe? ciascuna riga termina con \n ovviamente

Fenomeno85
02-04-2006, 11:46
STRTOK(3) Linux Programmer's Manual STRTOK(3)

NAME
strtok, strtok_r - extract tokens from strings

mi ricordavo giusto che esisteva :D


~§~ Sempre E Solo Lei ~§~

dj_ste
02-04-2006, 12:21
come faccio a leggere dal file una riga per volta?
poi quella riga la salvo in un buffer e poi la divido, giusto?
potreste scrivermi qualche riga di codice per farmi capire?

DanieleC88
02-04-2006, 13:21
Prova con questo:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main()
{
char * Token;
char * Stringa;
char * Line;
int Length;
FILE * File;

File = fopen("prova.txt", "r");
getline(&Line, &Length, File);
for (Stringa = strtok(Line, ";"); Stringa != NULL; Token = strtok(NULL, ";")) {
printf("Stringa: %s.\n", strndup(Stringa, (size_t)(Token-Stringa)));
Stringa = Token;
}
fclose(File);
return 0;
}

Non l'ho provato, ma dovrebbe andare (spero).

andbin
02-04-2006, 14:02
Prova con questo:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

int main()
{
char * Token;
char * Stringa;
char * Line;
int Length;
FILE * File;

File = fopen("prova.txt", "r");
getline(&Line, &Length, File);
for (Stringa = strtok(Line, ";"); Stringa != NULL; Token = strtok(NULL, ";")) {
printf("Stringa: %s.\n", strndup(Stringa, (size_t)(Token-Stringa)));
Stringa = Token;
}
fclose(File);
return 0;
}

Non l'ho provato, ma dovrebbe andare (spero).La getline è esclusivamente una estensione presente su sistemi GNU. Non è portabile quindi.

andbin
02-04-2006, 14:11
Ho un problema.
Ho un file che è strutturato in questo modo:

ciao;casa
gaia;topino
pappa;ciccia
ecc;ecc

e ho anche 2 stringhe salvate in 2 variabili distinte.
quello che devo fare è ad esempio confrontare se la stringa 1 è uguale a ciao e la stringa 2 a casa. oppure la prima stringa a pappa e la seconda a ciccio.

praticamente è come se le due stringhe che ho già salvato siano username e password e se queste due parole sono presenti nel file separate da una virgola l'utente è autenticato a fare qualcosa.

come faccio?Questo è un semplice esempio scritto in ANSI "C":
#include <stdio.h>
#include <string.h>

int main (void)
{
char buffer[64];
char *stringa1, *stringa2;
FILE *f;

if ((f = fopen ("file.txt", "r")) != NULL)
{
while (fgets (buffer, sizeof (buffer), f) != NULL)
{
if ((stringa1 = strtok (buffer, ";")) != NULL &&
(stringa2 = strtok (NULL, ";\n")) != NULL)
{
printf ("stringa1=%s stringa2=%s\n", stringa1, stringa2);

/* Fai i test che vuoi con stringa1/stringa2 */
}
}

fclose (f);
}

return 0;
}

DanieleC88
02-04-2006, 15:50
La getline è esclusivamente una estensione presente su sistemi GNU. Non è portabile quindi.
Si, lo so, l'avevo buttato giù solo come esempio veloce, lui voleva vedere come usare strtok.

dj_ste
02-04-2006, 19:20
ok, grazie a tutti ho risolto!