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
récupérer l'id d'une ligne sélectionné [ par annitwi ]
Bonjour, je travail actuellement sur un projet winform en c#. Sur un form j'ai un datagridview rempli à partir d'une base de données et une colonne d
Récupérer les attributs d'une ligne sélectionnée par l'utilisateur d'un datagrid [ par abdimen4 ]
Salut tout le monde, je suis en train de faire un mini projet "windows Forms appliction" en c# , j'ai utilisé un datagrid qui m'affiche tous les enreg
recuperer la ligne selectioné dans datagridview [ par benabdessamed ]
bonjour qq peut m'aider, je veut récupérer la ligne sélectionné dans datagridview; pour récupérer les données de cette ligne[^^yeuxenlair] abdessamed
Livres en rapport
|
Derniers Blogs
WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLETECHDAYS PARIS 2012 : SYSTEM CENTER SERVICE MANAGER 2012 VUE D'ENSEMBLE par ROMELARD Fabrice
Speakers: Julien Marechal, Gautier Confiant, Sébastien MEYER La session débute par le positionnement de la solution System Center par rapport aux concepts d'organisation ITIL. Le portail du catalogue de se...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : PLEINIèRE SECOND JOURTECHDAYS PARIS 2012 : PLEINIèRE SECOND JOUR par ROMELARD Fabrice
Après une première journée dédiée aux développeurs, cette seconde journée est dédiée au monde des entreprises et de ses applications. Ainsi, cette pleinière est dédiée à faire un 360 de l'évolution des applications Business aux demandes ac...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVéTECHDAYS PARIS 2012 : RETOUR D'EXPéRIENCE SUR LA MISE EN PLACE D'UN CLOUD PRIVé par ROMELARD Fabrice
Speaker : Guillaume Rochette Cette session est dédiée à fournir le retour sur la mise en place d'un cloud privé (IaaS) par Osiatis pour son compte ou celui de ses clients. Ce projet s'est déroulé sur 4 mois et a permis de faire évoluer...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|