View Full Version : [C] confrontare stringhe e parole in un file
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
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 ~§~
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).
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.
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.
ok, grazie a tutti ho risolto!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.