C# et traitement de fichiers

Résolu
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 - 26 août 2005 à 17:24
 beny100 - 23 nov. 2006 à 10:48
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
26 août 2005 à 17:38
Salut, je pense à qlq'chose comme ca:

using ( StreamReader sr = new StreamReader( "File.txt" ) )
{
while( ( line = sr.ReadLine( ) ) != null )
{
string[ ] split = line.Split( '|' );
}
}
3
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 11:08
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

}
3
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
26 août 2005 à 17:37
Tu as essayer la fonction string.split ?!
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 09:16
Désolé, les gars ct le we, je vais essayer de suite
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 09:26
j'ai essayer mais si je fais

messagebox.show(""+split);

ca compile pas comment faire en sorte qu'il reconnaisse split
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 09:35
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.
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 09:40
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!!
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 09:43
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!
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 09:46
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]
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 09:49
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.
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 09:55
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"
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 09:57
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

}
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 10:11
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
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 10:14
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.
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 10:42
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
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 11:19
ok merci

comment mettre les valeurs sortie (grace à mon split) dans une combobox a afficher
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 11:24
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]);

}

}
}
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 11:28
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
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 août 2005 à 11:32
{


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
0
paloxicide Messages postés 225 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 20 juin 2006 1
29 août 2005 à 11:38
Passe po a la compil car ne connait pas Arraylist
ArrayListe nombreAssoscie =
new ArrayList();
0
Rejoignez-nous