IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Langages Discussion :

Charger un fichier texte sous excel [Débutant]


Sujet :

Langages

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut Charger un fichier texte sous excel
    Bonjour,

    Je veux charger un fichier excel constitué de plusieurs colonnes sous excel.

    Exemple de fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    File.      
    NN16OD42100100      X                P 8/2015  ECRITURE DE CH          S      C             100080,03N                                 F
    NN16OD42100100                        P 8/2015  ECRITURE DE CH          S      D             130863,73N                                 F
    NN16OD42100100      A300009       P 8/2015  ECRITURE DE CH          S      D             8326,00N                                    F
    NN16OD42100100      A300020       P 8/2015  ECRITURE DE CH          S      D             4666,67N                                    F
    NN16OD42100100      A300030       P 8/2015  ECRITURE DE CH          S      D             6845,48N                                    F
    NN16OD42100100      A300040       P 8/2015  ECRITURE DE CH          S      D             0,14N                                         F
    NN16OD42100100      A301009       P 8/2015  ECRITURE DE CH          S      D            34396,15N                                    F
    NN16OD42100100      A303009       P 8/2015  ECRITURE DE CH          S      D            2301,04N                                     F
    NN16OD42100100      A304009       P 8/2015  ECRITURE DE CH          S      D            8887,01N                                     F
    NN16OD42100100      A304020       P 8/2015  ECRITURE DE CH          S      D            1800,00N                                     F
    NN16OD42100100      A305009       P 8/2015  ECRITURE DE CH          S      D            11708,47N                                   F
    Pourriez-vous m'aider pour charger un fichier texte sous excel (il y a des fois chaînes de caractère vides : exemple en dessous de X)

    Merci!

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    quel langage utilises-tu (C# ou VB.NET) ?
    C'est quoi le séparateur dans ton fichier de données ? Au début je pensais que c'était les tab, mais en sélectionnant le contenu on a l'impression qu'il s'agit de taille fixe (ce qui ne colle pas non plus vu qu'on a du décalage de colonne entre les lignes).

    edit, question subsidiaire : as-tu vraiment besoin d'utiliser Excel ?
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut réponse
    Salut jopopmk,

    J'utilise le langage C#.

    Je n'ai pas vraiment besoin de passer par excel. Par contre, j'ai besoin de traité les chaînes de caractères ( remplacement, ajout de nombre d'espaces ....) et surtout de garder les mêmes espaces et les mêmes alignements entre les différents champs.

    Il ne s'agit pas de tab mais plutôt d'espaces. (Il n'y a pas de décalages entre les lignes: c'est une faute de saisi (autant pour moi), donc je confirme qu'ils sont bien alignés mais on peut des fois sauter des caractères: exemple en dessous de x)

    Merci!

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Le souci c'est que je suis pas sûr qu'Excel puisse t'ouvrir un tel fichier par automation (cf. Workbooks.Open).

    Si j'étais à ta place et que l'utilisation d'Excel était un impératif je ferais une première transfo vers un format CSV avec delimiter.
    Si Excel n'était là que pour aider sur 2-3 manip' j'aurais laissé tombé :
    - c'est un objet lourd à charger et pas nécessairement simple à manipuler,
    - lire du fixed width et remplir une collection d'objets de mappage "à la main" est très simple.

    A voir si quelqu'un d'autre a une meilleure solution ...
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Je suis entièrement d'accord avec jopopmk !
    Tu connais l'index de départ et de fin de chaque valeur dans une ligne, tu n'as qu'a parcourir ton fichier ligne par ligne. Pas besoin d'Excel pour ça, cela reviendrait à enfoncer une punaise avec un marteau piqueur...

    Bon code,
    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    salut,

    Je vous remercie pour la réponse.

    J'ai essayé d'utiliser excel et je me suis rendu compte que la tâche était très compliqué : voir impossible.

    Je connais les coordonnées du début et de la fin de chaque ligne. Cependant, la taille des colonnes changent pour la raison de changement des longueurs des chaînes de caractères.

    Je ne vois pas comment je peux m'en sortir parce que on peut utiliser String.Insert() et String.remove() que pour un fichier de caractères (positions fixes).

    Pourriez-vous m'aider , SVP???

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Je connais les coordonnées du début et de la fin de chaque ligne. Cependant, la taille des colonnes changent pour la raison de changement des longueurs des chaînes de caractères.
    C'est en effet d'un coup moins évidant
    [EDIT j'avais zappé les champs vides]

    Si tu as forcement un nombre d'espace identique entre chaque valeur, alors un Split sur la ligne pourrait suffire, puis un Trim de chaque valeurs.

    [/Edit]
    Après si tu nous dis qu'il n'y a pas de nombre minimum d'espaces entre 2 zones alors ça va encore ce compliquer, d'ailleurs ma solution donnée au dessus n'est valable que si tu es sur que dans les valeurs tu ne peux pas avoir ce même nombre d'espaces...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  8. #8
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par samuel44 Voir le message
    Je connais les coordonnées du début et de la fin de chaque ligne. Cependant, la taille des colonnes changent pour la raison de changement des longueurs des chaînes de caractères.
    Du coup c'est pas de la taille fixe ...

    Citation Envoyé par samuel44 Voir le message
    Pourriez-vous m'aider , SVP???
    Fais suivre un fichier non retouché, avec une tite explication de texte, voire comment prendre la chose.
    Plus je connais de langages, plus j'aime le C.

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Ci-joint, je vous prie de trouver le fichier:

    Je veux pour le traitement :
    1. remplacer la première ligne (exemple: "CAPITAL" par "ECRITURE")
    2. Décaler la colonne ou il y a S de 3 espaces.
    3. modifier S par VIR et remettre le début de VIR à la position colonne N 119.
    4. Ajouter une colonne "E" entre N et F.
      ...........
      On se base toujours sur les coordonnées de début de chaque colonnes (par exemple après traitement à la position : 119 dans chaque ligne)


    Merci !
    Fichiers attachés Fichiers attachés

  10. #10
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    On semble quand même être sur du taille fixe, avec alignement variable (droite/gauche). Quelques questions :
    - ligne 10 on trouve un truc du genre "Cxxxxxxxxx xxxxxxx S". On est d'accord que c'est la même colonne que, par exemple "Sxxxxxxx" en ligne 1 ou "GAIN" en ligne 7 ?
    - "FAIE 8/2016" est une ou deux colonnes ? la deuxième partie ressemble à une date et avec un mois à deux chiffres soit on colle à "FAIE", soit on décale à droite (il semble y avoir une espace pour ça avant la colonne suivante).
    - as-tu besoin de typer tes valeurs ou peut on faire les manip' attendue avec juste des string ?

    Comment j'imagine la structure du fichier pour l'instant :
    - première ligne un libellé (ici 22 char ou toute la ligne, à voir de ton côté),
    - pour les autres lignes on a 9 colonnes, séparées par des espaces,
    - les tailles sont, dans l'ordre (en char) : 23, 13, 4, 7, 20, 5, 6, 20 et 33 (avec les 8 séparateurs on retombe sur 139),
    - si on veut conserver les alignements il faut également les lister : g, g, g, g, g, d, d, d et d.
    Avec ça on peut lire les données de manière structurée et apporter à peu près toutes les modifs voulues.
    Maintenant, comme le nombre de modif' ne semblent pas arrêté de ton côté il vaudrait peut-être mieux passer par une struct/class. Si par contre tu sais exactement quelle modif tu dois apporter à chaque ligne tu devrais pouvoir faire ça à la volée.

    Je vais essayer de te faire un exemple avec une classe, pour que tu puisses faire évoluer facilement le truc à ta sauce, en implémentant les 3 modifications que tu as listées.
    Plus je connais de langages, plus j'aime le C.

  11. #11
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Salut

    oui - ligne 10 on trouve un truc du genre "Cxxxxxxxxx xxxxxxx S". On est d'accord que c'est la même colonne que, par exemple "Sxxxxxxx" en ligne 1 ou "GAIN" en ligne 7 (donc, les cordonnées de début sont toujours les mêmes) alors que la fin est différent.

    Oui, "FAIE 8/2016" est dans la même colonne et du coup on peut réaliser l'opération sur toute la quantité ("FAIE 8/2016").

    as-tu besoin de typer tes valeurs ou peut on faire les manip' attendue avec juste des string ? (oui juste des strings mais on peut avoir besoin de modifier FAI310816OD43100000 en FAI31082016OD43100000

    - les tailles sont, dans l'ordre (en char) : 23, 13, 4, 7, 20, 5, 6, 20 et 33 (avec les 8 séparateurs on retombe sur 139), -> oui , mais ce qui compte c'est les coordonnées de début de chaque chaîne (genre je veux que F commence à la colonne 219 en regardant sur notePad (ligne 1, colonne 219: parmi les transformations demandées).

    Dernière chose: il y a des fois : des caractères qui manquent (on peut voir ça en dessous de x).

    A mon avis, la manipulation devait se baser sur les coordonnées de début de chaque chaîne par colonne et puis faire INSERT , REMOVE,

    Merci de ton aide!

    J'attends ton retour!

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Ce que je faisais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     string mots1 = File.ReadAllText(path);
                    // mots = mots.Insert(150, "E--");
     
                    /* mots1 = mots1.Insert(57, "      ");
                     mots1 = mots1.Insert(201, "      ");
    Je récupère tout le texte , après je modifie en utilisant les coordonnées globales par rapport à tout le texte.

    Là je veux vraiment travailler ligne par ligne en utilisant les fonctions insert , remove......

    J'essaie de faire comme ça
    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
     
     int counter = 0;
                               string line;
     
                               // Read the file and display it line by line.
                               System.IO.StreamReader file =
                                  new System.IO.StreamReader(textBox2.Text);
                               while ((line = file.ReadLine()) != null)
                               {
                                   Console.WriteLine(line);
                                   counter++;
                                   }
     
                               string[] lignes = File.ReadAllLines(textBox1.Text);
                                    for(int i=0;i< counter;i++)
                               lignes[i] = lignes[i].Insert(22,"         ");
    ça ne marche pas : j'arrive pas à ajouter 10 espaces à partir de la position 22 fin de la chaîne de caractère 1 de chaque ligne
    en plus , j'aimerais bien jouer sur les coordonnées de début de chaque chaîne de caractère.

    Merci!



  13. #13
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    J'ai trouvé la solution et je vous remercie!

    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
          // Read the file and display it line by line.
                               System.IO.StreamReader file =
                                  new System.IO.StreamReader(textBox1.Text);
                               while ((line = file.ReadLine()) != null)
                               {
                                   //Console.WriteLine(line);
                                   counter++;
                                   }
                                file.Close();
     
                    string[] lignes = File.ReadAllLines(textBox2.Text);
                    lignes[0] = lignes[0].Remove(0, 30);
                    lignes[0] = lignes[0].Insert(0, "Import Ecritures");
                    for (int i = 1; i < counter; i++)
                    {
                        lignes[i] = lignes[i].Insert(21, "    ");
                        lignes[i] = lignes[i].Insert(37, "    ");
                        lignes[i] = lignes[i].Insert(60, "                      ");
                        lignes[i] = lignes[i].Remove(108,1);
                        lignes[i] = lignes[i].Insert(109, "         VIR");
                        lignes[i] = lignes[i].Insert(122, "   ");
                        lignes[i] = lignes[i].Insert(152, "                    E--");
                        lignes[i] = lignes[i].Insert(176, "           ");
                    }
    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Importation d'un fichier texte sous format excel
    Par samuel44 dans le forum Général Dotnet
    Réponses: 9
    Dernier message: 24/10/2016, 16h21
  2. Importer les données d'un fichier texte sous Excel
    Par luksvibes dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/06/2013, 15h47
  3. Réponses: 5
    Dernier message: 09/01/2008, 07h54
  4. charger un fichier texte du disque dur
    Par frol dans le forum Langage
    Réponses: 2
    Dernier message: 02/11/2005, 17h09
  5. importation d'un fichier texte vers excel
    Par darkpocket dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo