begin process at 2012 05 29 03:20:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

gestion de chaines alphanumériques (equivalent a un champ VARCHAR)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

vendredi 6 août 2004 à 11:28:16 | gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom

bonjour,

je dois traiter un fichier texte de type CSV (sauf que les séparateurs sont pas des ; mais juste des tabulations) dans lequel se trouvent des champs ou on trouve a la fois des entiers et des caractères (par exemple des adresses, genre "6 rue truc")

or je ne sais pas quel type de variable utiliser pour récuperer la valeur de chaines comme ca


j'attends vos idées avec impatience, merci d'avance
vendredi 6 août 2004 à 11:29:43 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom

ET BIEN SUR J'AI OUBLIE LE PLUS IMPORTANT:

je dois faire ca en C ou C++ :)

qu'est ce qu'on peut etre distrait quand on est désésperé...
vendredi 6 août 2004 à 11:38:36 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

essirc

Salut est ce qu' un sscanf() suffirait ?

Exemple :

char donnee_lue[256]; // une ligne de ton fichier CSV
char nom[25];
char prenom[25];
char adresse [50];

sscanf(donnee_lue,"%s\t%s\t%s\t",nom, prenom, adresse);

où %s demande la lecture d'une chaine, \t est le code de la tabulation
vendredi 6 août 2004 à 13:56:28 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

Hades53

Membre Club
Ma fonction gettok devrait être utile dans ce cas là.

Sinon tu peux 'spliter' ta chaîne 'ligne' en plusieurs sous-chaînes.
char *c, *d;
c = d = ligne; /*ligne: une des ligne de ton fichier*/
while (*c) {
while (*c != 9 && *c) c++;
if (*c == 9) {
*c = 0;
printf("chaine: %s\n",d); //d represente la sous-chaine actuelle
d = ++c;
}
else {
printf("chaine: %s\n",d); //d represente la dernière sous-chaine
break; //nous évite une vérification de *c inutile
}
}
vendredi 6 août 2004 à 14:38:14 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom

J'ai réussi a bidouiller un truc avec fgets qui marche partiellement, maintenant j'ai un probleme de comptage.

pour que vous compreniez un peu plus prenons un exemple (en gros, le fichier sur lequel je fais mes tests a la con)

j'ai un fichier texte qui contient :

blah bleh bloh truc 5 truc blah

ce que je veux c'est récupérer "truc 5 truc".

je sais que cette chaine se trouve entre la 3eme et la 4eme tabulation.

j'ai les variables suivantes:

int main(void)
{
FILE *file;
char Buffer;
//char ptrMot;
char motVC[15];
int nbTab=0;


ce que je fais, c'est que je compte d'abord le nombre de tabulations:
---------------------------------------------
while (nbTab<3)
{
fread(&Buffer, 1, 1, file); //on range les caractere dans le buffer
if (Buffer=='\t') nbTab++;
---------------------------------------------------

ensuite, je calcule la taille du champ que je veux en comptant le nb de caractères jusqu'a la prochaine tabulation:

--------------------------
i=0;
fread(&Buffer, 1, 1, file);
while (Buffer!='\t') {i++;}
----------------------------


Enfin, j'extrait la chaine de longueur i et je la range la ou je veux:

-----------------------------
fgets(motVC,i,file);
-----------------------------


seulement voila, le programme ne s'arrete pas a la 4eme tabulation, donc je me retrouve avec motVC qui contient "truc 5 truc blah"


et n'etant pas le plus fortiche en C, j'arrive pas a trouver pq il s'arrete pas de compter après la 4eme tabulation pour calculer la longueur du champ/



une idée?
vendredi 6 août 2004 à 14:39:15 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom

REMARQUE: ca se voit pas sur le forum, mais ce sont des tabulations, sauf dans "truc 5 truc"
vendredi 6 août 2004 à 14:44:45 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom



bon alors j'ai meme pas mis la bonne version de mon code.

un ptit instant je reviens avec la bonne.
vendredi 6 août 2004 à 14:55:19 | Re : gestion de chaines alphanumériques (equivalent a un champ VARCHAR)

xuenylom

voila le code complet en question et en entier pour que vous compreniez mieux, j'ai parfois du mal a etre clair

-----------------------------------------------------------------
#include <stdio.h>
#include <string.h>

char file_t[150];

//Fonction de spécification du fichier

int file_c()
{
printf(">emplacement du fichier:");
gets(file_t);
fflush(stdin);
return 0;
}

//fonction principale
int main(void)
{
FILE *file;
char Buffer;
char ptrMot;
char motVC[15];
int nbTab=0;
int i;

file_c();

if((file = fopen(file_t, "r")) != NULL)
{

while (!feof(file))
{


while (nbTab<3)
{
fread(&Buffer, 1, 1, file);

if (Buffer=='\t') nbTab++;
}


//on compte le nb de caractères du champ (le champ s'arrete a la tabulation suivante)


while (Buffer!='\t')
{
i=0;
fread(&Buffer, 1, 1, file);
i++;
}


fgets(motVC,i,file);

//on affiche le champ qu'on viens de récupérer

printf("%s",motVC);

}
}
fclose(file);
getch();
}

-----------------------------------------------------------------------

voila.

si vous voulez test aussi, faite un fichier texte avec la ligne

bla[tab]bla[tab]bla[tab]truc 5 truc[tab]bla

[tab]= touche tabulation (sur le forum ca fait un espace, donc je précise l'emplacement des tab)

merciiii merciiiii pour vos idées que vous allez me donner


Cette discussion est classée dans : champ, equivalent, gestion, chaines, alphanumériques


Répondre à ce message

Sujets en rapport avec ce message

Ouverture d'une base, Gestion d'une base en C++ [ par the100tinelle ] Bonjour,je dois faire un logiciel de gestion d'articles, de clients, de devis et de factures en C++ (j'utilise Visual Studio 6.0) et je dois créer une GESTION STOCK ET FICHIER CLIENTS [ par ERVATDU ] Bonjour,Je suis artisan toiletteur, et dans le cadre du suivi de mes stocks et fichier clients, j'ai depuis plusieurs mois chercher plusieurs info sur Problemes avec des chaines de caracteres [ par darkwhite ] Salut a tous, Je cherche a faire un code qui a partir d'une chaine renvoie les initiales de chaque mot.Exemple :bonjour a tous donneBAT J'ai essayé ce gestion de fichiers ds C++.net [ par malouve ] bonjour à tous,je suis sur un projet ki consiste à gérer (ouvrii, traiter les données et fermer) un fichier txt ( qui contient 201 lignes et 9 colonne gestion IRda en C [ par Mickylord ] Bonjour a tous !Je recherche une librairie en C qui permette la gestion des ports IRda pour la récéption et l'envoi de données.Je sais qu'il existe de gestion d'une base documentaire [ par samar22 ] BONJOUR,***je veux trouver un logiciel gérant une base documentaire à travers un moteur de recherche et pouvant etre déployer dans un environnement In Equivalent SNPRINT pour Driver [ par Taron31 ] Bonjour, dans le code d'un driver, j'ai absolument besoin d'utiliser une fonction équivalente à Snprintf (ne marche pas dans le code d'un driver, c'es gestion du temps en fraction de seconde dans C [ par mouloudh ] Bonjour la communauté,j'essaie de faire un programme qui simule le dértoulement d'un tapis roulant, avec vitesse et detecteurs de début et de fin. J'a [URGENT] Equivalent de fctn ADO en Odbc [ par ip2x ] Aprés l'effort, le reconfort... http://ip2x.free.fr/tracks/part4 gestion des ports en c++ [ par winxor ] Bonjour,Dans un projet de sentinelle sous windows (capable d'intégrée différents modules : des programmes externes), je voudrais savoir comment effect


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,546 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales