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

C# Discussion :

Changement de chemin de fichier / Boucle


Sujet :

C#

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut Changement de chemin de fichier / Boucle
    Bonjour à tous,

    Je suis entrain de faire un petit programme qui :
    - lis un fichier .txt qui est dans un dossier sur le bureau
    - cherche une chaine de caractère dans le fichier
    - affiche un résultat
    - crée un fichier .txt et écris dedans des indications

    Je suis débutant et maintenant je cherche à faire ceci mais pour plusieurs fichier, je m'explique.
    Mon dossier "New Folder" contient 6 fichier .txt, le programme fais sont travail pour le premier fichier et je veux qu'avec une boucle, le programme change automatiquement de fichier .txt dans "New Folder" et refasse la même chose pour tout les fichiers .txt dans le dossier.
    J'espère avoir été clair.

    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
        {
            static void Main(string[] args)
            {
     
     
     
               // string mot2 = "13";
     
                TimeSpan ts;
                int compteur=0;
                double globalDuration = 0;
                using (StreamWriter sw = new StreamWriter(@"C: \Users\maxursin\Desktop\New folder\LogDuree.txt"))  //création du fichier )
                {
     
                    string[] text = File.ReadAllLines(@"C: \Users\maxursin\Desktop\New folder\LOG1.log");
                    string mot = "########## Duration";
     
                    for (int i = 0; i < text.Length; i++)
                    {
                        if (text[i].Contains(mot))
     
                            {
                            string duree = text[i];
     
                            string[] tokens = duree.Split('\t');
                            ts = TimeSpan.Parse(tokens[2]);
     
                            Console.WriteLine(duree + " - durée (s) : " + ts.TotalSeconds.ToString() + " secondes");
                            sw.WriteLine(tokens[1] + "  " +  ts.TotalSeconds.ToString() + " secondes");
                            sw.WriteLine("  ");
                            compteur++;
                            globalDuration += ts.TotalSeconds;                       
     
                        }
                    }
                    sw.WriteLine(compteur.ToString() + "      " + globalDuration.ToString());
     
     
                }
     
     
                Console.ReadKey();
     
            }
        }
    }
    Voici mon dossier "New Folder" :
    Nom : new folder.PNG
Affichages : 215
Taille : 9,7 Ko

    Si vous avez des questions, n'hésitez pas!
    Merci.

  2. #2
    Membre confirmé
    Avatar de nouanda
    Homme Profil pro
    Hobbyist
    Inscrit en
    Mai 2002
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Australie

    Informations professionnelles :
    Activité : Hobbyist

    Informations forums :
    Inscription : Mai 2002
    Messages : 246
    Points : 627
    Points
    627
    Par défaut
    Utlise Directory.GetFiles pour recuperer la liste de fichiers dans le repertoire, puis applique ton traitement a chacun des fichiers (avec une boucle for, ou un foreach())

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    C'est bon merci j'ai fais tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (int nbFiles = 1; nbFiles < 7; nbFiles++)
                    {
                        string filePath = @"C: \Users\maxursin\Desktop\New folder\LOG" + nbFiles.ToString() + ".log";
    Car tout mes fichiers ont le même nom avec juste un chiffre devant.

    Bonne journée.

  4. #4
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    Le problème c'est que ce que tu as fait n'est pas propre. Tu devrais écouter les conseils que l'on te donne ^^. Car là c'est pas clean du tout.
    Le fait que ça "fonctionne" n'est pas gage d'un bon code. Sinon, ce serait trop beau !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Bonjour, c'est mon maitre d'apprentissage qui m'a conseillé de faire comme cela, pour la simplicité et parce que mes fichiers portent le même nom.
    Bonne journée.

  6. #6
    Membre régulier
    Femme Profil pro
    Developpeur logiciel
    Inscrit en
    Juin 2015
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 62
    Points : 74
    Points
    74
    Par défaut
    C'est bien dommage => code non réutilisable, sale et pas pro .

  7. #7
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 730
    Points : 5 391
    Points
    5 391
    Par défaut
    Citation Envoyé par MaxLikeMilf Voir le message
    Bonjour, c'est mon maitre d'apprentissage qui m'a conseillé de faire comme cela, pour la simplicité et parce que mes fichiers portent le même nom.
    Bonne journée.
    Et bien ton maître d'apprentissage est soit un mauvais programmeur (désolé mais c'est vraiment pas pro ce genre de choses), soit un mauvais pédagogue (pour te donner de si mauvaises habitudes).

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Bonjour tout le monde,

    Pour répondre à vos messages, je tien a vous dire que j'ai utilisés la bonne méthode en fin de compte. Mais pour ma défense, je voudrais dire que le logiciel/application que je développe est pour une entreprise (alternance), le but n'est pas que mon code sois réutilisable ou autre. Cette entreprise a 6 processeurs qui effectuent les "compilations", donc 6 fichiers. Bref je vais pas faire un pavé mais voila, le code n'étais pas "propre" mais ça convenait à l'entreprise.
    J'ai quand même effectué un Directory.GetFiles en fin de compte.

    Voici mon code, sûrement incompréhensible mais si vous avez des conseils pour synthétiser tout cela, je suis preneur.

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;
     
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                const int nbCompilationFiles = 6;
     
                long nbFolderFiles = Directory.GetFiles(@"C: \Users\maxursin\Desktop\New folder", "LOG*.log").LongLength;
                Hashtable dlls = new Hashtable();
                TimeSpan ts;
                int compteur = 0;
                double globalDuration = 0;
                int compteurF = 1;
                double globalDurationFiles = 0;
                int maxDuration = (int)globalDurationFiles / nbCompilationFiles;
                string TemplateTwo = File.ReadAllText(@"C: \Users\maxursin\Desktop\New folder\Template\Template2.txt");
                string LineReturn = "\r\n";
     
                {
                    for (int nbFiles = 1; nbFiles < (nbFolderFiles + 1); nbFiles++)
                    {
                        string filePath = @"C: \Users\maxursin\Desktop\New folder\LOG" + nbFiles.ToString() + ".log";
                        string[] text = File.ReadAllLines(filePath);
     
     
                        string mot = "########## Duration";
     
                        for (int i = 0; i < text.Length; i++)
                        {
                            if (text[i].Contains(mot))
                            {
                                string[] tokens = text[i].Split('\t');
                                if (!dlls.ContainsKey(tokens[1]))
                                {
                                    dlls.Add(tokens[1], TimeSpan.Parse(tokens[2]).TotalSeconds);
                                    globalDurationFiles = globalDurationFiles + TimeSpan.Parse(tokens[2]).TotalSeconds;
                                }
                                else
                                {
                                    double globalGenDllDuration = (double)dlls[tokens[1]];
                                    globalGenDllDuration += TimeSpan.Parse(tokens[2]).TotalSeconds;
                                    globalDurationFiles = globalDurationFiles + TimeSpan.Parse(tokens[2]).TotalSeconds;
                                    dlls.Remove(tokens[1]);
                                    dlls.Add(tokens[1], globalGenDllDuration);
                                }
     
                            }
                        }
                    }
     
                    maxDuration = (int)(Math.Ceiling(globalDurationFiles / nbCompilationFiles));
     
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_01.bat");
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_02.bat");
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_03.bat");
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_04.bat");
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_05.bat");
                    File.Delete(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_06.bat");
     
                    IDictionaryEnumerator iEnum = dlls.GetEnumerator();
     
                    string pathDlls = @"C: \Users\maxursin\Desktop\New folder\DllsDuration1.log";
                    StreamWriter result = new StreamWriter(@"C: \Users\maxursin\Desktop\New folder\ResultDlls.txt");
                    StreamWriter sw = new StreamWriter(pathDlls);  //création du fichier )
                    string sourceFile = @"C: \Users\maxursin\Desktop\New folder\Template\Template.txt";
                    string destinationFile = @"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat";
                    File.Copy(sourceFile, destinationFile);
                    result.WriteLine("Total DLLS       " + dlls.Count.ToString() + "    " + (globalDurationFiles - 1));
                    result.WriteLine("");
                    while (iEnum.MoveNext())
                    {
                        sw.WriteLine(iEnum.Key + "  " + iEnum.Value);
                        File.AppendAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", LineReturn);
                        File.AppendAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", LineReturn);
                        File.AppendAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", TemplateTwo);
     
                        string CPSName = File.ReadAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat");
                        CPSName = CPSName.Replace("CPS1800 ##########", (string)iEnum.Key + " ##########");
                        CPSName = CPSName.Replace("CPS1800", (string)iEnum.Key);
                        File.WriteAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", CPSName);
     
                        compteur++;
                        globalDuration = globalDuration + (double)iEnum.Value;
                        if ((globalDuration > maxDuration) && (compteurF <= nbCompilationFiles))
                        {
     
                            sourceFile = @"C: \Users\maxursin\Desktop\New folder\Template\Template.txt";
                            destinationFile = @"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + (compteurF + 1).ToString() + ".bat";
                            File.Copy(sourceFile, destinationFile);
     
                            string texttest = File.ReadAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat");
                            texttest = texttest.Replace("sp_StartSub 1", "sp_StartSub " + compteurF.ToString());
                            texttest = texttest.Replace("sp_EndSub 1", "sp_EndSub " + compteurF.ToString());
                            texttest = texttest.Replace("Compile Sub 1", "Compile Sub " + compteurF.ToString());
                            File.WriteAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", texttest);
     
                            sw.WriteLine("");
                            sw.WriteLine(compteur.ToString() + "      " + globalDuration.ToString());
                            sw.Close();
                            result.WriteLine("DllsDuration" + compteurF.ToString() + "    " + compteur.ToString() + "     " + globalDuration.ToString());
                            compteurF++;
     
                            pathDlls = @"C: \Users\maxursin\Desktop\New folder\DllsDuration" + compteurF.ToString() + ".log";
                            sw = new StreamWriter(pathDlls);
                            globalDuration = 0;
                            compteur = 0;
     
                        }
     
                    }
     
                    string LastCompilSub = File.ReadAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat");
                    LastCompilSub = LastCompilSub.Replace("sp_StartSub 1", "sp_StartSub " + compteurF.ToString());
                    LastCompilSub = LastCompilSub.Replace("sp_EndSub 1", "sp_EndSub " + compteurF.ToString());
                    LastCompilSub = LastCompilSub.Replace("Compile Sub 1", "Compile Sub " + compteurF.ToString());
                    File.WriteAllText(@"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" + compteurF.ToString() + ".bat", LastCompilSub);
     
                    sw.WriteLine("");
                    sw.WriteLine(compteur.ToString() + "      " + globalDuration.ToString());
                    sw.Close();
                    result.WriteLine("DllsDuration" + compteurF.ToString() + "    " + compteur.ToString() + "     " + globalDuration.ToString());
                    result.Close();
     
     
                }
     
            }
        }
    }
    Bonne journée.

  9. #9
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut
    Citation Envoyé par MaxLikeMilf Voir le message
    Bonjour tout le monde,

    Pour répondre à vos messages, je tien a vous dire que j'ai utilisés la bonne méthode en fin de compte. Mais pour ma défense, je voudrais dire que le logiciel/application que je développe est pour une entreprise (alternance), le but n'est pas que mon code sois réutilisable ou autre. Cette entreprise a 6 processeurs qui effectuent les "compilations", donc 6 fichiers. Bref je vais pas faire un pavé mais voila, le code n'étais pas "propre" mais ça convenait à l'entreprise.
    J'ai quand même effectué un Directory.GetFiles en fin de compte.

    Voici mon code, sûrement incompréhensible mais si vous avez des conseils pour synthétiser tout cela, je suis preneur.
    Le souci c'est que tu apprends le métier, alors autant partir sur de bonnes bases et pondre du code à l'aspect "professionnel"

    Liste non exhaustive de ce que peux (dois selon moi ) modifier :

    • le namespace ConsoleApplication1 c'est pas sérieux ;
    • externaliser dans un ou plusieurs fichiers de configuration tout ce qui peut l'être :
      • ex. const int nbCompilationFiles = 6; - si demain ils passent à 7 processeurs ou que le 6 tombe en panne, c'est stupide de devoir relivrer ton appli pour gérer ça ;
      • ex. tous les paths "C: \Users\maxursin\Desktop\New folder" ;
      • ex. ton pattern de nom de fichier "LOG*.log" ;
      • etc.

    • externaliser tout l'affichage dans des fichiers de resources, ex. "Total DLLS " ;
    • toute ton appli est dans le main, mets au moins une méthode de plus ;
    • tu gères pas les exceptions ;
    • utilise des blocs using quand c'est possible (typiquement pour tout ce qui concerne la manipulation de fichiers) ;
    • utilise un Dictionary typé plutôt qu'une Hashtable ;
    • factorise tout ce qui peut l'être, voir 3 fois de suite la chaîne @"C: \Users\maxursin\Desktop\New folder\Template\__Compile_Sub_0" c'est pas possible - ça rejoint ce que je disais sur "tout mettre dans la conf" ;
    • etc. etc.

    Bref, faut toujours penser généricité, réutilisation, évolutivité, etc. etc. Et ça ne prend pas plus de temps de faire proprement une fois que c'est de l'ordre du réflexe

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

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

    Informations forums :
    Inscription : Septembre 2018
    Messages : 37
    Points : 10
    Points
    10
    Par défaut
    Salut,

    Merci pour tout tes conseils, je vais essayer de les utilisés, je ne suis encore que débutant, j'ai commencé la programmation il y a moins d'un mois, c'est compliqué pour moi de tout synthétiser et de faire ça tout propre, mais je vais essayer :

    Bonne journée,

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/01/2012, 22h38
  2. récuperation de chemin de fichiers !!!
    Par massiliaman dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/07/2007, 18h17
  3. Réponses: 3
    Dernier message: 21/06/2005, 16h18
  4. [SAX] Chemin du fichier XML
    Par mikemikemike dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 25/11/2004, 15h04
  5. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50

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