Accueil > Forum > > > > split qui plante
split qui plante
lundi 5 mai 2008 à 14:43:03 |
split qui plante

tibo76530
|
bonjour je viens demander de l'aide car je planche sur un probleme de puis quelques jours, et je n'arrive pas à m'en sortir. voila: je vais récupérer des données dans un fichier .txt. je récupère cela dans un streamreader que je lis ensuite ligne par ligne. ensuite, je traite chaque ligne avec mon split afin de récupérer les différents champs contenus dedans. mon problème est que le traitement est très lent, sans raison apparente. mon appli tombe en rade à partir de 2000 lignes à traiter, ce qui n'est vraiment ^pas beaucoup. Si quelqu'un a une idée, je suis preneur. me demander si l'on veut mon code tibo PS: je ne savais pas dans quel rubrique poster, alors je l'ai mis la, du au Split dans le titre de la rubrique.
|
|
lundi 5 mai 2008 à 15:12:06 |
Re : split qui plante

SharpMao
|
Réponse acceptée !
Hello,
Il faudra sans doute que tu mettes ton code,ou du moins, au moins la boucle qui fait le traitement, pour qu'on puisse t'aider. Difficile de faire mieux snas voir le code.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!" (Coluche / 1944-1986 / Pensées et anecdotes)
|
|
lundi 5 mai 2008 à 15:26:28 |
Re : split qui plante

tibo76530
|
voici la partie de code ou je pense que ca plante: StreamReader sr = newStreamReader(nom);String ligne = sr.ReadLine();while (ligne != null){ String[] temp = ligne.Split('|');for (int i = 0; i < temp.Length; i++){ // textBox3.Text= textBox3.Text + temp[i].ToString()+" ";} //textBox3.Text = textBox3.Text + "\r\n";ligne = sr.ReadLine(); } // Fermeture du StreamReader (attention très important) sr.Close();
merci d'avance
|
|
mardi 6 mai 2008 à 08:32:49 |
Re : split qui plante

SharpMao
|
Réponse acceptée !
Hello, A mon avis, le problème ne vient ni du split, ni de la lecture du fichier. J'ai essayer le bout de code que tu as mis, et avec un fichier de 100'000 lignes formatté comme suit : 1|2|3|4 2|4|6|8 3|6|9|12 Il me faut moins de 0.1 seconde pour exécuter ce code.
Si par contre, je rajoute string s =""; //à l'extérieur du while
et s+= temp[i] +" ";//dans la boucle for. Inutile de faire un .ToString, temp[i] est déjà un string.
et s+= Environment.NewLine; // après la boucle for Avec ça, le temps de traitement monte à presque 20 minutes !
Par contre, si j'utilise un StringBuilder (dans l'assembly System.Text) StringBuilder sb =new StringBuilder();//à l'extérieur du while
s.AppendFormat("{0} ", temp[i]);//dans la boucle for et sb.AppendLine();// après la boucle for
Avec ça, le temps de traitement n'est plus que de 0.2 secondes !!
Mais attend, on peut faire encore mieux : Si ton but est de récupérer tout le texte de ton fichier dans un string ou les '|' sont remplacés par des ' ', tu fais ça en une ligne :
string s = File.ReadAllText(nom).Replace('|', ' '); Temps de rtaitement : inférieur à 0.05 secondes, toujours pour un fichier de 100'000 lignes !!!
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!" (Coluche / 1944-1986 / Pensées et anecdotes)
|
|
mardi 6 mai 2008 à 08:36:04 |
Re : split qui plante

SharpMao
|
Réponse acceptée !
Encore une chose, C'est très bien de mettre un sr.Close, mais si pour une raison ou une autre, ton code génère une exception, ton fichier ne sera pas fermé. Tu pourrais mettre un try...catch...finally, mais le plus simple, est d'utiliser le met clé using : using (StreamReader sr = new StreamReader(nom)) { //Fait ce que tu dois faire ave ton sr, à la fin du using, il sera libéré ! }
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!" (Coluche / 1944-1986 / Pensées et anecdotes)
|
|
mardi 6 mai 2008 à 09:26:36 |
Re : split qui plante

tibo76530
|
hello sharpmao je n'ai pas mis tout le code, mais j'avais déjà mis un try catch . sinon, merci de t'etre penché sur mon probleme. je vais essayer de corriger mon code avec tes conseils. je te dirai ensuite comment je m'en suis sorti. dans tous les cas, merci !
|
|
mardi 6 mai 2008 à 10:06:27 |
Re : split qui plante

tibo76530
|
bon, je viens de modifier mon code et j'ai fait des tests par rapport à tes conseils. ca marche très bien. merci encore pour tes tuyaux. le plantage devait venir de la concaténation de String, non?
|
|
mardi 6 mai 2008 à 10:41:30 |
Re : split qui plante

SharpMao
|
Réponse acceptée !
Hello,
Oui, le problème veanit bien de la concaténation de string. Désolé de dire ça comme ça, mais ton problème est presque l'exemple parfait de ce qu'il faut éviter avec les string.
A chaque fois que tu fais s+= " "; il recrée un nouveau string contenant la nouvelle valeur. c'est la répétion de cette création qui devient de plus en plus gourmade en resources. Avec un StringBuilder, il gère la taille de manière dynamique, et on le voit avec les temps que je t'ai donné, de manière efficace.
Amicalement, SharpMao
"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!" (Coluche / 1944-1986 / Pensées et anecdotes)
|
|
vendredi 9 mai 2008 à 00:08:29 |
Re : split qui plante
|
mercredi 14 mai 2008 à 11:26:23 |
Re : split qui plante

tibo76530
|
re-bonjour à tous. finalement, je dois afficher mes info dans une autre form, sous forme d'un datagrid view. malheureusement, j'ai de nouveau des problemes de temps d'executions. je suis en train de chercher, mais je ne vois pas pour le moment.
voici mon code:
form = new Form(); DataGridView dtg1 = new DataGridView(); dtg1.Size = new System.Drawing.Size(1000, 400); /* On recupère le texte complet du fichier */ if (fi.Exists) // on verifie que le fichier existe { using( StreamReader sr = new StreamReader(nom)){ String ligne = sr.ReadLine(); while (ligne != null) { String[] temp = ligne.Split('|'); //dtg1.AutoResizeRows(); dtg1.Rows.Add(); for(int i=0;i<temp.Length-1;i++) { dtg1.Rows[j].Cells[i].Value = temp[i]; } ligne = sr.ReadLine(); } form.Controls.Add(dtg1); form.Show(); } merci d'avance!
|
|
Cette discussion est classée dans : ligne, récupérer, demander, split, plante
Répondre à ce message
Sujets en rapport avec ce message
pb avec une DropDownList [ par kinderman81 ]
Salut,Lorsque je veux récupérer la valeur de la ligne sélectionnée, il me renvoi toujours la valeur de la 1ere ligne.J'ajoute mes lignes dans mon DDL
récupérer la ligne courante [ par keisuke ]
Salut a tous, Je voudrais, faire une chose dont j'ai déja recherché sur le site, s'il y avait des solutions, mais comme je suis débutant, j'aimerais,
Récupérer le numéro de ligne d'un DatagridView [ par HansPrestat ]
Bonjour,Je souhaiterai récupérer le numéro de la ligne de mon DataGridView quand je la sélectionne ou lorsque je clique dans une de ses céllule.PS: J'
Extraire chaine d'une ligne [ par Dezouille ]
Bonjour à tous les developpeur de la communauté Codes Sources,je viens vous voir pour vous donner un petit coup de main.J'ai un fichier texte avec des
Index d'une ligne au survol de la souris [ par njulio ]
Salut à tous, J'ai un datagridview et j'aimerais récupérer l'index d'une ligne au survol de la souris afin de pouvoir récupérer la valeur d'une cellul
Probleme avec fonction Split C# [ par MisterEdddd ]
Bonjour,Je suis debutant en programmation C# et j'ai un petit problème avec la fonction Split.Voilà. je veux lire chaque ligne d'un fichier csv ou txt
Supprimer ligne vide dans fichier txt [ par LilBisk ]
Bonjour à tous! J'ai fait un sous-programme permettant de lire un fichier .txt, récupérer les informations séparées par des ";" et il lit tout le fic
[c#] ouverture et affichage de plusieurs fichiers en meme temps ! [ par vto59 ]
Bonjour a tous, Ce que je souhaite faire, c'est ouvrir plusieurs fichiers en meme temps et les rassembler en un seul fichier ! J'ai essayer ça : [
Commande SPLIT [ par spmsbl ]
Bonjour Je dois extraire le nombre de mots dans un string à laide de la commande SPLIT Ex: string [] mot {``aa bb-cc-dd ee ff``} Les mots sont sép
Récupérer Post Data, notamment input "file" [ par PittMarson ]
Bonjour à tous! Merci déjà à tous les contributeurs qui ont souvent été une ressource importante pour mes développements. Je vous expose mon petit di
Livres en rapport
|
Derniers Blogs
[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOURTECHDAYS PARIS 2010 : LA PLEINIèRE DU SECOND JOUR par ROMELARD Fabrice
Après un retour sur l'histoire des TechDays de Paris et le fait que ce soit le plus gros event MS au monde (du fait de sa gratuité), le président de MS France (Eric Boustoullier) a fait une présentation de la vision Microsoft pour les années à venir...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|