C# et traitement de fichiers [Résolu]

Signaler
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
-
 beny100 -
Voila, j'ai un fichier txt qui est fait comme suit:

&FRN&|[1]|[2]FournisseurX|[3]FournisseurY|[20]Fournisseur Z
&TCO&|[1]|[2]Tco1|[3]Tco2|[20]Tco3

Ou &FRN& est la table
[2], l'id
FournisseurX, le nom

En fait je veux réussir a parcourir les lignes 1 à 1 et caractère par carctère pour décomposer ma ligne car le | sert à délimiter les valeurs mais je bloque pour faire ma fonction en C#

Je ne sais absolument po faire grand chose car débutant

31 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Salut, je pense à qlq'chose comme ca:

using ( StreamReader sr = new StreamReader( "File.txt" ) )
{
while( ( line = sr.ReadLine( ) ) != null )
{
string[ ] split = line.Split( '|' );
}
}
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Mettons que dans ta variable a (un stirng il y est quelque chose)
int nb;

if (int.TryParse(a, out nb))

{

// ici, a est un nombre, sa valeur est dans NB

}
else {

// ici, a n'est pas un nombre

}
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Tu as essayer la fonction string.split ?!
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
Désolé, les gars ct le we, je vais essayer de suite
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
j'ai essayer mais si je fais

messagebox.show(""+split);

ca compile pas comment faire en sorte qu'il reconnaisse split
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
la variable split est un tableau. Donc tu as split[0] a split[n] ou n
représente le nombre de valeurs de chaque ligne dans le fichier.
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
string
line;
string[] split = null;
int k = 0;
using (StreamReader sr = new StreamReader("C:\\Documents and Settings\\Agri\\Mes documents\\Visual Studio 2005\\Projects\\Projet Villeneuve\\file\\texte\\server.txt"))
{
while ((line = sr.ReadLine()) != null)
{
split = line.Split('|');
k++;
}
MessageBox.Show("k = " + k);
for (int h = 0; h != k; h++)
{
MessageBox.Show("" + split[h]);
}
}

Il ne lit que la 2ième ligne et seuleument &TCO& et [1]
k=2

C koi le pb!!
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Le tableau split est remplit chaque nouvelle ligne. Tu dois traiter les
infos dans la boucle while (ou tu fais ton k++). Car a chaque occurence
du while il passe dans la ligne suivante!
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
OK, donc fo traiter avant qu'il passe à la ligne suvante, si je te suis bien

mais pourquoi sur la ligne 2 : &TCO&|[1]|[2]Tco1|[3]Tco2|[20]Tco3

il ne m'affiche que &TCO& et [1]
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Ta boucle est mal faite (la boucle de parcours)

Elle devrai etre un truc dans le genre

for(int h=0;h<split.length;h++) {

MessageBox.show(split[h]);

}



La tu vas avoir plusieurs messagebox qui vont s'afficher en énumérant les valeurs d'une ligne.
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
ok nickel pour ta boucle, merci
Mais comment lui dire "attends la première ligne est fini je vais exécuter ma boucle pour en tirer mes infos avant de passer à la seconde"
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Ben dans ton while:

while ((line = sr.ReadLine()) != null)

{

split = line.Split('|');

k++;

// mettre ici le code pour la ligne en cours .....

//..

//..

// quand toutes les lignes sont passées, alors on continue sur la ligne suivante

}
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
ok mais vu qu'il y a 3 sortes de caractères à sortir comme |, [, ]

est ce que en faisant


split= line.Split(
new
char[] {
'|',
'[',
']'});

j'obtiens directement ce que je veux à savoir une ligne sans ces caractères
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Si tu veux récupérer tout ce qu'il y a entre ces caracteres, oui. Cela
va te découper ta chaine en fonction des caracteres que tu as passé en
parametres.
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
OK merci et une dernière question enfin j'espère sais tu comment savoir si une chaine de caractères est un entier ou un string
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
ok merci

comment mettre les valeurs sortie (grace à mon split) dans une combobox a afficher
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
Tu veux mettre quoi exactement dans le combo ? tout ce que tu obtiens ?

Imaginons que ton combo se nomme comboBox1.

{

while ((line = sr.ReadLine()) != null)

{

split = line.Split(new
char[] {
'|',
'[',
']'}
);

for(int h=0;h<split.length;h++) {

comboBox1.Items.Add(split[h]);

}

}
}
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
en fait si tu regardes au début y'a un chiffre qui est l'id et juste apres tu as le nom qui correspond a ce chiffre

donc ce que je voudrais, c afficher les string et garder les chiffres comme valeur correspondante

En gros c n identifiant et le nom correspondant
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
7
{


ArrayListe nombreAssoscie = new ArrayList();


while ((line = sr.ReadLine()) != null)


{


split = line.Split(new
char[] {
'|',
'[',
']'}
);


for(int h=0;h<split.length;h++) {


comboBox1.Items.Add(split[1]);


nombreAssoscie.add(split[0]);


}


}


}


Avec ce
code tu as dans le combo les fournisseurs et dans l'arraylist les
nombre associés. Avec comme lien: index du combobox= index de
l'arraylist
Messages postés
225
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
20 juin 2006
1
Passe po a la compil car ne connait pas Arraylist
ArrayListe nombreAssoscie =
new ArrayList();