[C#] Récupérer mots de .txt et save dans tab
Stargirlfr
Messages postés
1175
Date d'inscription
Statut
Membre
Dernière intervention
-
Stargirlfr Messages postés 1175 Date d'inscription Statut Membre Dernière intervention -
Stargirlfr Messages postés 1175 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je débute en C# et aurais besoin de votre aide. Je travaille sous Visual Studio.
Mon problème est le suivant :
J'ai un fichier texte qui comporte des informations de la façon suivante :
[numéro] [nom] [prénom] [service]
Par exemple : 1 Dupont Martin 3
Je souhaiterais récupérer ces informations et les enregistrer dans un tableau pour pouvoir les manipuler plus facilement après.
J'ai codé cette fonction, mais cela ne marche pas... Je ne sais pas vraiment comment utiliser la fonction "Split(' ')" qui me permettrait de récupérer chaque mot (séparé par un espace) et de l'enregistrer dans le tableau à 2 dimensions (tab[i,j] où i représenterait les colonnes, au nombre de 4 et j les lignes, au nombre de 15).
Pourriez-vous m'aider ?
Merci par avance !!!
Je débute en C# et aurais besoin de votre aide. Je travaille sous Visual Studio.
Mon problème est le suivant :
J'ai un fichier texte qui comporte des informations de la façon suivante :
[numéro] [nom] [prénom] [service]
Par exemple : 1 Dupont Martin 3
Je souhaiterais récupérer ces informations et les enregistrer dans un tableau pour pouvoir les manipuler plus facilement après.
J'ai codé cette fonction, mais cela ne marche pas... Je ne sais pas vraiment comment utiliser la fonction "Split(' ')" qui me permettrait de récupérer chaque mot (séparé par un espace) et de l'enregistrer dans le tableau à 2 dimensions (tab[i,j] où i représenterait les colonnes, au nombre de 4 et j les lignes, au nombre de 15).
private void saveTxtFileInTab() { try { StreamReader reader = new StreamReader("C:\\monfichier.txt"); string ligne = reader.ReadLine(); string[,] tab = new string[4,15]; // Lecture de toutes les lignes while (ligne != null) { // COLONNES (N° - NOM - PRENOM - SERVICE) for (int i = 0 ; i < 4 ; i++) { // LIGNES (1 à 15) for (int j = 0; j < 15; j++) { tab[i, j] = ligne; } } } // Fermeture du fichier reader.Close(); // Affichage du tableau for (int i = 0; i < 4; i++) { for (int j = 0; j < 15; j++) { textBox1.AppendText(tab[i,j]); } } } catch (Exception ex) { // En cas d'exception / d'erreur : prévenir textBox1.AppendText("Exception: " + ex.Message + "\n"); } finally { //textBox1.AppendText("Executing finally block" + "\n"); } }
Pourriez-vous m'aider ?
Merci par avance !!!
A voir également:
- [C#] Récupérer mots de .txt et save dans tab
- Save as pdf office 2007 - Télécharger - Bureautique
- Avis sur samsung galaxy tab a9+ - Accueil - Tablettes
- Recuperer message whatsapp supprimé - Guide
- Identifiant et mot de passe - Guide
- Impossible de récupérer mon compte gmail - Guide
7 réponses
tu pourrais essayer de faire une classe personnel et ensuite faire une liste generique de ta classe personnel(List<Personnel>), d'apres moi sa serai la meilleur façon,
cependant, si tu veut tjr faire un tableau 2d, tu peu utiliser cette methode pour lire ton fichier, ainsi que les 2 constante... La methode te retourne un tableau 2d de ton fichier texte(s'il a 4 colonne et moins que 15 ligne...)
sur ce, bonne chance
public const int NB_LIGNE = 15;
public const int NB_COLONNE = 4;
private string[,] lire()
{
StreamReader reader = new StreamReader("mr.txt");
string[,] tabString = new string[NB_COLONNE, NB_LIGNE];
string[] tabTemp;
int cptLigne = 0;
while (!reader.EndOfStream)
{
tabTemp = reader.ReadLine().Split(' ');
for (int index = 0; index < NB_COLONNE; index++)
{
tabString[index, cptLigne] = tabTemp[index];
}
cptLigne++;
}
return tabString;
}
cependant, si tu veut tjr faire un tableau 2d, tu peu utiliser cette methode pour lire ton fichier, ainsi que les 2 constante... La methode te retourne un tableau 2d de ton fichier texte(s'il a 4 colonne et moins que 15 ligne...)
sur ce, bonne chance
public const int NB_LIGNE = 15;
public const int NB_COLONNE = 4;
private string[,] lire()
{
StreamReader reader = new StreamReader("mr.txt");
string[,] tabString = new string[NB_COLONNE, NB_LIGNE];
string[] tabTemp;
int cptLigne = 0;
while (!reader.EndOfStream)
{
tabTemp = reader.ReadLine().Split(' ');
for (int index = 0; index < NB_COLONNE; index++)
{
tabString[index, cptLigne] = tabTemp[index];
}
cptLigne++;
}
return tabString;
}
si tavait de la difficulte avec ton code, c pcq tu faire ReadLine et tu l'utilisais comme s'il lisait le fichier au complet, alors que sa lit seulement la premiere ligne...
Oui, merci, en fait, j'ai trouvé la solution pour mon tableau (sur un autre forum).
Mais comme tu dis, il faut que j'utilise une list à la place... Mais du coup, je ne sais plus comment faire.
Voilà mon code, mais j'ai un problème "l'index se trouve en dehors des limites du tableau".
Sachant que ma classe Employee a bien été créé et compte 4 arguments (4 string).
MERCI d'avance pour votre aide !!!
Mais comme tu dis, il faut que j'utilise une list à la place... Mais du coup, je ne sais plus comment faire.
Voilà mon code, mais j'ai un problème "l'index se trouve en dehors des limites du tableau".
Sachant que ma classe Employee a bien été créé et compte 4 arguments (4 string).
try { StreamReader reader = new StreamReader("C:\\employees.txt"); string ligne = reader.ReadLine(); List<Employee> listEmp = new List<Employee>(); while ((ligne = reader.ReadLine()) != null) { string[] Items = ligne.Split(new char[] { ' ' }); listEmp.Add(new Employee(Items[0].Trim(), Items[1].Trim(), Items[2].Trim(), Items[3].Trim())); } reader.Close(); // AFFICHAGE DE LA LISTE foreach (Employee emp in listEmp) { textBox1.AppendText(emp.ToString()); } } catch (Exception ex) { textBox1.AppendText("Exception: " + ex.Message + "\n"); } finally { //textBox1.AppendText("Executing finally block" + "\n"); }
MERCI d'avance pour votre aide !!!
au lieu de sa:
string ligne = reader.ReadLine();
List<Employee> listEmp = new List<Employee>();
while ((ligne = reader.ReadLine()) != null)
{
string[] Items = ligne.Split(new char[] { ' ' });
listEmp.Add(new Employee(Items[0].Trim(), Items[1].Trim(), Items[2].Trim(), Items[3].Trim()));
}
essay plutot
string[] tabTemp;
while (!reader.EndOfStream)
{
tabTemp = reader.ReadLine().Split(' ');
listEmp.Add(new Employee(tabTemp[0], tabTemp[1], tabTemp[2], tabTemp[3]));
}
string ligne = reader.ReadLine();
List<Employee> listEmp = new List<Employee>();
while ((ligne = reader.ReadLine()) != null)
{
string[] Items = ligne.Split(new char[] { ' ' });
listEmp.Add(new Employee(Items[0].Trim(), Items[1].Trim(), Items[2].Trim(), Items[3].Trim()));
}
essay plutot
string[] tabTemp;
while (!reader.EndOfStream)
{
tabTemp = reader.ReadLine().Split(' ');
listEmp.Add(new Employee(tabTemp[0], tabTemp[1], tabTemp[2], tabTemp[3]));
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bon, en fait, j'ai fait ça et ça fonctionne. Enfin, pas tout à fait car il me manque le 1er élément qui n'est pas affiché (il m'affiche tout sauf la 1ère ligne... Bizarre !)
Encore merci pour ton aide halo_quebec !!!
Encore merci pour ton aide halo_quebec !!!
while ((ligne = reader.ReadLine()) != null) { string[] Items = ligne.Split(' '); if (Items.Length == 4) listEmp.Add(new Employee(Items[0].Trim(), Items[1].Trim(), Items[2].Trim(), Items[3].Trim())); } reader.Close();
De rien, sa fait plaisir,
mais je me demandait, pourquoi tu utilise trim()??
et pour ta premiere ligne, si tu as toujours cette ligne:
string ligne = reader.ReadLine();
en haut de ton while, alors c normal...
tu lis une ligne et tu en lit une autre dans ton while(ligne = reader.ReadLine() != null)
alors la premiere fois, tu reecrit par dessu ta premier ligne avant de l'utiliser...
mais je me demandait, pourquoi tu utilise trim()??
et pour ta premiere ligne, si tu as toujours cette ligne:
string ligne = reader.ReadLine();
en haut de ton while, alors c normal...
tu lis une ligne et tu en lit une autre dans ton while(ligne = reader.ReadLine() != null)
alors la premiere fois, tu reecrit par dessu ta premier ligne avant de l'utiliser...
Exact ! Merci !
Une autre question : comment comparer le 4ème élément de ma liste ?
Je m'explique : je souhaite afficher uniquement les employées où le 4ème élément est égal à 1.
Voilà ce que j'ai codé mais... il ne comprend pas le "&&" (je confonds avec le C ?)
EDIT : j'avais oublié des parenthèses ! Ca fonctionne maintenant !!
Une autre question : comment comparer le 4ème élément de ma liste ?
Je m'explique : je souhaite afficher uniquement les employées où le 4ème élément est égal à 1.
Voilà ce que j'ai codé mais... il ne comprend pas le "&&" (je confonds avec le C ?)
while ((ligne = reader.ReadLine()) != null) { string[] Items = ligne.Split(' '); if ((Items.Length == 4) && (Items[3].Trim() == "1")) { listEmp.Add(new Employee(Items[0].Trim(), Items[1].Trim(), Items[2].Trim(), Items[3].Trim())); } }
EDIT : j'avais oublié des parenthèses ! Ca fonctionne maintenant !!