cs_dreamkill
Messages postés14Date d'inscriptionsamedi 17 décembre 2005StatutMembreDernière intervention19 juin 2009
-
19 mai 2009 à 20:01
cs_dreamkill
Messages postés14Date d'inscriptionsamedi 17 décembre 2005StatutMembreDernière intervention19 juin 2009
-
2 juin 2009 à 10:38
Bonjour,
J'aurais besoin d'un petit coup de pouce parce que même en faisant le tour des sites web je n'ai pas trouvé de réponses à mon problème.
Je vous explique mon problème.
J'ai un fichier texte dans lequel il y a des données écrites dans ce style là :
Nom : Jean Claude
Prénom : Duss
Age : 21
Je voudrais récupérer les infos se trouvant après les ":" pour ensuite les stocker dans une base de données ( SQL server)
Je ne sais pas si je dois d'abord stocker ces infos dans des variables ou un tableau ?
rours
Messages postés61Date d'inscriptiondimanche 5 novembre 2000StatutMembreDernière intervention24 février 2010 20 mai 2009 à 10:45
Bonjour.
déja un bon moyen est d'utiliser la méthode split.
En faisant readline ... split(':') ça découpe ta ligne avec comme séparateur ":".
donc si tu sotck ça dans une liste par exemple, pour ta ligne 1 tu vas avoir :
nom | Jean Claude
Ensuite soit tu fais un test pour voir si tu trouves les mots "nom", "prenom" etc .. et tu ne les prends pas comptes.
Soit pour chaque ligne tu n'écrit pas le 1ier élément de ta ligne (ça doit se faire).
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 24 mai 2009 à 00:41
Bonsoir,
En fait tout dépend du format de ton fichier texte.
Est-ce que les balises (Nom, Prenom ...) sont toujours présentes et bien orthographiée (casse respectée)?
Est-ce que le format (position des ':' et des espaces) est toujours respecté?
y a t'il un séparateur entre les groupes de données?
l'utilisation de Regex peut permetre l'analyse d'un tel fichier, notamment si la casse et les accents ne sont pas toujours respectés.
Par exemple, l'expression "
"^nom ?: ?(?<Name>.*)\r\nPr.nom ?: ?(?<Lastname>.*)\r\nage ?: ?(?.*)\r\n--"
Permet de retrouver ce que tu recheches, du momment que les blocs de données sont séparées par "--"
cs_dreamkill
Messages postés14Date d'inscriptionsamedi 17 décembre 2005StatutMembreDernière intervention19 juin 20091 26 mai 2009 à 11:15
Merci pour cette réponse très détaillé.
Cela se rapproche fortement de ce que j'essai de faire, toutefois mes informations ne se trouve pas dans un même fichier.
C'est à dire que je récupère des fichiers avec les même balises et les mêmes données à l'interieurs toujours écrit de la même facon
J'aurais par exemple :
Fichier a.txt
Nom : Duss
Prenom : Jean Claude
Age : 21
Fichier b.txt
Nom : Morin
Prenom : Bernard
Age : 24
etc..
donc je ne sais pas si jdois utliser Regex quand même ?
Et proceder de la manière que vous m'avez décrite?
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 28 mai 2009 à 20:31
Bonsoir
Bien sûr tu pêux utiliser un Regex sur chaque fichier, ça marche, on peut même écrire un Regex qui découperait une chaine en Clef/valeur, utilsé ligne par ligne.
mais dans ce cas ce n'est pas la méthode conseillée.
Si tes fichiers sont tous identiques et si les balises sont toujours correctement formatées alors il vaut mieux une analyse plus conventionelle, se sera plus rapide.
utilise donc plutot un Split comme la proposé rours pour découper tes lignes tu obtiendra 2 chaines la clef et la valeur.
cs_dreamkill
Messages postés14Date d'inscriptionsamedi 17 décembre 2005StatutMembreDernière intervention19 juin 20091 1 juin 2009 à 09:43
Bonjour,
J'ai essayé la méthode avec le split et une arraylist mais j'ai une erreur :
" l'index se trouve en dehors des limites du tableau"
Comment faire pour enlever cette erreur ?
voici mon code
merci
string [] tab;
string ligne =
null;
ArrayList donnees =
new
ArrayList();
char[] sep = {
':' };
StreamReader fluxInfos =
null;
try {
using (fluxInfos =
new
StreamReader(
@"D:\Gestion_Licence\test.txt")) {
ligne = fluxInfos.ReadLine();
while (ligne !=
null) {
tab = ligne.Split(sep);
donnees.Add(tab[1].Trim());
}
fluxInfos.Close();
// Affichage du fichier texte
/*while (ligne != null) {
Console.WriteLine(ligne);
ligne = fluxInfos.ReadLine();
}
System.Console.ReadKey(); */
}
}
catch (
Exception e) {
Console.WriteLine(
"L'erreur suivante s'est produite : " + e.Message); System.
cs_dreamkill
Messages postés14Date d'inscriptionsamedi 17 décembre 2005StatutMembreDernière intervention19 juin 20091 1 juin 2009 à 16:45
Je ne comprend pas parce que l'affichage du tableau marche lors que je fais tab[0] ;
j'affiche donc les mots avant ":" mais pour laffichage de tab[0] j'obtient l'erreur
"l'index est en dehors de la taille du tableau " ?
comment faire pour corriger cette erreur ?
Merci
cs_Robert33
Messages postés834Date d'inscriptionsamedi 15 novembre 2008StatutMembreDernière intervention14 janvier 201733 1 juin 2009 à 18:41
Bonjour
C'est que pour la ligne en cours il n'y a pas les 2 elements séparés par un ':'
Essaies d'afficher la ligne lue sur l'erreur.
tu dois également tester le retour du split, pour être certain d'avoir au moins 2 éléménts (propriété Length du tableau).