Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. ###raw>post.musername###
    Membre averti
    Problème pour écrire dans un fichier texte
    bonjour,
    j'ai developpé un logiciel en c# et dans l'une de mes parties j'ai un soucis.
    Je lis un fichier excel ( qui contient plusieurs ligne et j'essaye de crééer un fichier texte de la forme suivant e:


    nom prenom age mail
    profession identifiant etc

    seulement le truc c'est chaque valeur se doit etre placé au bon index, c'est à dire le nom commence à la position 0 et le prénom commence à la position 10(colonne), l'age à la position 20 , le mail à la position 25 puis ensuite je fais un saut de ligne.

    le problème c'est que j'ai mon fichier texte mais tout es collé, je n'arrive pas à faire commencé les autres valeurs à leur position respectifs.

    voici mon code :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
     string cmdText = "SELECT * FROM [Feuil1$]";
                    OleDbCommand command = new OleDbCommand(cmdText, connection);
     
                    command.Connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();
     
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {                  
     
     
                            myWritter.Write(reader[0].ToString()); 
                            //on deplace le curseur                       
                            myWritter.Write(reader[1].ToString());
                            myWritter.Write(reader[2].ToString());
                            myWritter.Write(reader[3].ToString());
                            myWritter.Write(reader[4].ToString());
                            myWritter.Write(reader[5].ToString());
                            myWritter.Write(reader[6].ToString() + "\n");
     
                            myWritter.Write(reader[7].ToString());
                            //on deplace le curseur                       
                            myWritter.Write(reader[8].ToString());
                            myWritter.Write(reader[9].ToString());
                            myWritter.Write(reader[10].ToString());
                            myWritter.Write(reader[11].ToString());
                            myWritter.Write(reader[12].ToString());
                            myWritter.Write(reader[13].ToString() + "\n");
     
                            myWritter.Write(reader[14].ToString());                      
                            myWritter.Write(reader[15].ToString());
                            myWritter.Write(reader[16].ToString());
                            myWritter.Write(reader[17].ToString());
                            myWritter.Write(reader[18].ToString());
                            myWritter.Write(reader[19].ToString());
                            myWritter.Write(reader[20].ToString());
                            myWritter.Write(reader[21].ToString());
                            myWritter.Write(reader[22].ToString());
                            myWritter.Write(reader[23].ToString());
                            myWritter.Write(reader[24].ToString());
                            myWritter.Write(reader[25].ToString());
                            myWritter.Write(reader[26].ToString());
                            myWritter.Write(reader[27].ToString());
                            myWritter.Write(reader[28].ToString() + "\n");
                            //myWritter.Write(reader[29].ToString() + "\\s");
     
                            // MessageBox.Show(mytextfile.);
                        }
                    }
     
                    myWritter.Close();


    en fait myWritter.Write(reader[1].ToString()); j'aimerais qu'il soit plus loin dans mon fichier texte final mais je ne sais pas comment faire en c#.
    Dans mon fichier actuellement j'ai :
    gerarddupond20gerad@live.fr
    etc......
    et moi j'aimerais pouvoir faire :
    gerard dupond 20 gerad@live.fr


    merci pour votre aide
      0  0

  2. #2
    Expert éminent sénior
    Salut

    Tu peux utiliser PadRight sur chacune de tes colonnes :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    myWritter.Write(reader[0].ToString().PadRight(10)); // Si cette colonne doit faire 10 caractères 
    //on deplace le curseur                       
    myWritter.Write(reader[1].ToString().PadRight(10)); // Si cette colonne doit faire 10 caractères 
    myWritter.Write(reader[2].ToString().PadRight(5)); // Si cette colonne doit faire 5 caractères

    Ainsi de suite. Deux remarques cependant :

    • attention aux colonnes dont la valeur pourrait dépasser la limite
    • pourquoi de la largeur fixe ? CSV (ou autre) serait beaucoup plus souple

  3. #3
    Membre averti
    merci pour ton retour, je test cela de suite

    on me demande de créé un fichier texte, à partir d'un fichier excel et selon un cahier des charge

  4. #4
    Expert confirmé
    bonjour

    La mise en forme composite des chaines avec le class StringFormat est ton amie.
    Elle comporte un facteur -int- d'alignement à droite (positif) ou gauche(negatif).
    Neamains les colonnes depassant la limite doivent etre ajustees.
    exemple code :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
     
    namespace WinFormatFichierTexte
    {
        public partial class Form2 : Form
        {
            private string pathFile=Directory.GetCurrentDirectory()+ @"\myfile.txt";
            public Form2()
            {
                InitializeComponent();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                string data = String.Format("{0,0} {1,-10} {2,-25} {3, -10} \n",
                     "Title", "Publisher", "Price", "Year");
     
     
                string nom = "Villahardouin"; //13 caracteres,il faudra stripper 5 caracteres
                string prenom = "Geoffroi";   //8 caracteres
                string age = 56.ToString();    //2 caracteres
                string mail = "jacqoulecroquant@gmail.com"; //26 caracteres
     
                using (StreamWriter sw = new StreamWriter(pathFile))
                { 
                    // 1er exemple  illustration 
                    sw.Write(data);
     
                    //ne tient pas compte du fait que nom depasse 10 caracteres
                    string data1 = String.Format("{0,0} {1,-10} {2,-20} {3, -25} \n",
                       nom, prenom, age, mail);
                    sw.Write(data1); 
     
                    // tient compte du fait que nom depasse 10 caracteres d'ou le remove
                    string data2 = String.Format("{0,0} {1,-10}| {2,-20} {3, -25} \n",
                        nom.Remove (10), prenom, age, mail);
                    data2 += data2;
                    //textBox2.Text = data2;
     
                    sw.Write(data2); 
     
     
                }
     
            }
        }
    }


    bon code...

  5. #5
    Membre averti
    bonjour,
    pour information ,ça marche super bien, un grand merci à vous.

###raw>template_hook.ano_emploi###