[C] Enlever des separateurs
LCoileux
-
LCoileux -
LCoileux -
Bonjour,
j'aurais besoin d'un peu d'aide ^^
Je vous explique mon soucis : je voudrais lire un fichier texte ligne par ligne, et ranger chaque element trouvé dans une variable. Seulement, l'organisation du fichier peut être n'importe comment. Chaque element d'une ligne peuvent être séparés par un espace, et à la ligne suivante, par deux espaces par exemple.
De plus, sur une même ligne, un élément peut etre séparé du suivant par un espace, et celui d'après peut venir après une tabulation.
La seule chose que je sais, c'est l'ordre des éléments (chaine de caractere suivie de deux entiers suivi de...) qui reste toujours le même.
Du coup, j'aurais voulu savoir s'il etait possible de ramener tous les separateurs à un seul même ?
Une partie de mon code :
Donc je sais par exemple que la ligne lue contiendra une chaine de caractere suivie de 3 entiers suivis de...mais j'ignore de combien d'espaces ils seront séparés.
C'est possible de faire en sorte qu'ils soient tous séparés que d'un seul espace ?
j'aurais besoin d'un peu d'aide ^^
Je vous explique mon soucis : je voudrais lire un fichier texte ligne par ligne, et ranger chaque element trouvé dans une variable. Seulement, l'organisation du fichier peut être n'importe comment. Chaque element d'une ligne peuvent être séparés par un espace, et à la ligne suivante, par deux espaces par exemple.
De plus, sur une même ligne, un élément peut etre séparé du suivant par un espace, et celui d'après peut venir après une tabulation.
La seule chose que je sais, c'est l'ordre des éléments (chaine de caractere suivie de deux entiers suivi de...) qui reste toujours le même.
Du coup, j'aurais voulu savoir s'il etait possible de ramener tous les separateurs à un seul même ?
Une partie de mon code :
while (fgets(ligne,LONG,fp) != 0){ sscanf(ligne,"%s %d %d %d %s %s %s %s", user, &pid, &ppid, &c, stime, tty, time, cmd); }
Donc je sais par exemple que la ligne lue contiendra une chaine de caractere suivie de 3 entiers suivis de...mais j'ignore de combien d'espaces ils seront séparés.
C'est possible de faire en sorte qu'ils soient tous séparés que d'un seul espace ?
A voir également:
- [C] Enlever des separateurs
- Enlever pub youtube - Accueil - Streaming
- Comment enlever une page sur word - Guide
- Enlever mode sécurisé samsung - Guide
- Enlever mot de passe windows 10 - Guide
- Enlever liste déroulante excel - Guide
2 réponses
sauf erreur, je crois que sscanf s'occupe de tout ça.
"
Whitespace character: the function will read and ignore any whitespace characters (this includes blank spaces and the newline and tab characters) which are encountered before the next non-whitespace character. This includes any quantity of whitespace characters, or none.
Non-whitespace character, except percentage signs (%): Any character that is not either a whitespace character (blank, newline or tab) or part of a format specifier (which begin with a % character) causes the function to read the next character from str, compare it to this non-whitespace character and if it matches, it is discarded and the function continues with the next character of format and str. If the character does not match, the function fails and returns."
(sur http://www.cplusplus.com/reference/cstdio/sscanf/
sinon tu as aussi strtok() pour "parser" (comme on dit dans le jargon) ta chaine en éléments séparés par ce que tu veux.
"
Whitespace character: the function will read and ignore any whitespace characters (this includes blank spaces and the newline and tab characters) which are encountered before the next non-whitespace character. This includes any quantity of whitespace characters, or none.
Non-whitespace character, except percentage signs (%): Any character that is not either a whitespace character (blank, newline or tab) or part of a format specifier (which begin with a % character) causes the function to read the next character from str, compare it to this non-whitespace character and if it matches, it is discarded and the function continues with the next character of format and str. If the character does not match, the function fails and returns."
(sur http://www.cplusplus.com/reference/cstdio/sscanf/
sinon tu as aussi strtok() pour "parser" (comme on dit dans le jargon) ta chaine en éléments séparés par ce que tu veux.
Effectivement, sscanf s'en occupait, mon erreur venait d'autre part.
Mais j'aurais encore besoin d'aide.
Voilà le morceau de code qui coince. La fonction sscanf recupere bien tous les elements et me les met dans mes variables. Mais lorsque je veux remplier le champ "user" de ma structure, il me met une erreur de segmentation...
Ma structure ressemble à ca :
et je ne vois pas d'où ca peut venir.
Mais j'aurais encore besoin d'aide.
PROCESS *pProc; pProc = (PROCESS *)malloc(sizeof(PROCESS)); char stime[LONG],tty[LONG],time[LONG], pUser[LONG], pNomCommande[LONG], ligne[LONG]; int pid,ppid,c; ... fgets(ligne,LONG,fp) while (fgets(ligne,LONG,fp) != 0){ sscanf(ligne,"%s %d %d %d %s %s %s %s", pUser, &pid, &ppid, &c, stime, tty, time, pNomCommande); pProc->user = pUser; /*C'est là que ca merde*/ pProc->pid = pid; pProc->pidPere = ppid; pProc->nomCommande = pNomCommande; g_node_insert( g_node_find_pid(racine,pProc->pidPere),-1,g_node_new(pProc)); } fclose(fp);
Voilà le morceau de code qui coince. La fonction sscanf recupere bien tous les elements et me les met dans mes variables. Mais lorsque je veux remplier le champ "user" de ma structure, il me met une erreur de segmentation...
Ma structure ressemble à ca :
struct process{ int pid; int pidPere; char *user; char *nomCommande; }; typedef struct process PROCESS;
et je ne vois pas d'où ca peut venir.