Forum Programmation.perl ouvrir, fermer et créer les fichiers avec chemin relatif

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-6
19
oct.
2015

Salut a tous,
comme vous le constaterez, dernièrement j'avais posé des questions concernant les directions(ouvrir, fermer et créer). Au fait mon Maître de stage m'a dit que j'étais en train de mal m'y prendre, et j'ai eu à fouiller sur le net. Si je pouvais avoir des exemple clairs, je n'en ai pas vraiment trouvé. Je ne sais pas si quelqu'un ici aurait déjà eu à faire à un tel problème, car j'aimerai ouvrir, fermer et créer les fichiers avec chemin relatif.

Merci bien

  • # comme avant

    Posté par  . Évalué à 2.

    ben oui, c'est bete mais un chemin absolu demarre de la racine du disque / ou C: ou D: selon l'OS
    et un chemin relatif demarre depuis le dossier courant.

    ici un exemple pour redescendre (..) de 2 dossiers, puis remonter ensuite dans chemin/relatif/vers/ et ouvrir le fichier

    open my $FH,<,"../../chemin/relatif/vers/fichier";

    à adapter evidemment à ton arborescence et ton OS

    • [^] # Re: comme avant

      Posté par  . Évalué à -8. Dernière modification le 20 octobre 2015 à 12:48.

      bon disons j'aiun fichier qui se trouve en chemin absolut dans le dossier CSV

      C:\Users\Desktop\SysCompare_v01\CSV\DATA2.csv

      et maintenant j'aimerai l'insere dans mon Script.pl en chemin ralatif, comment m'y prendre et ensuite
      si j'aimerai execute mon script.pl dans perl command line devrai je toujours taper: perl script.pl DATA2.csv ou alors je dois taper tout le chemin relativ.

      • [^] # Re: comme avant

        Posté par  . Évalué à 0.

        Si tes fichiers se trouvent (et se trouveront toujours) dans C:\Users\Desktop\SysCompare_v01\CSV\, dans ce cas tu dois pouvoir stocker ce chemin en dur dans ton script, et lorsque l'utilisateur lui passe DATA2.csv en paramètre, tu n'as plus qu'à concaténer le chemin et nom de fichier.

        Ou alors, je n'ai pas compris ton problème.

      • [^] # Re: comme avant

        Posté par  . Évalué à 2.

        si tes données sont dans
        C:\Users\Desktop\SysCompare_v01\CSV\DATA2.csv

        que ton script est dans
        C:\Users\Desktop\SysCompare_v01\Scripts

        alors ton chemin relatif devient
        ..\CSV\DATA2.csv

        tu lances alors ton programme (qui prenait deja le chemin en parametre) avec

        perl monscript.pl ..\CSV\DATA2.csv

        au lieu de

        perl monscript.pl C:\Users\Desktop\SysCompare_v01\CSV\DATA2.csv

        ou alors j'ai pas compris le probleme posé par ton maitre

        • [^] # Re: comme avant

          Posté par  . Évalué à 3.

          sous windows comme sous les unix, je recommande l'utilisation de / comme séparateur de répertoires, c'est compris par le système et ne risque pas de provoquer de blagues dans le cas d'utilisation de " à la place de '

          Il ne faut pas décorner les boeufs avant d'avoir semé le vent

          • [^] # Re: comme avant

            Posté par  (site web personnel) . Évalué à 3.

            Un bémol, en cas d'utilisation du préfixe \\?\ pour les chemins étendus, nécessaire lorsqu'on tombe dans des cas de chemins trop longs sous Windows (qui est assez vite atteint avec 260 caractères pour MAX_PATH hors lecteur) car alors les fonctions sur les fichiers passent directement la chaîne au système de fichiers sans transformer les / en \.

            Plus de détails ici: https://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx

            Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

            • [^] # Re: comme avant

              Posté par  . Évalué à 3.

              ha zut, j'ignorais ce détail, heureusement, je n'ai jamais eu besoin de 260 caractères, c'est quand même assez moisi comme comportement.

              Il ne faut pas décorner les boeufs avant d'avoir semé le vent

              • [^] # Re: comme avant

                Posté par  . Évalué à -7.

                merci a vous je suis encore entrain de faire des essais, par conntre je ne peus pas encore vous donner un compte rendu.

                • [^] # Re: comme avant

                  Posté par  . Évalué à -6.

                  comme toujours j'ai une question concernant des fichiers que j'aimerai que mon code produise a la sortie voici un morceau de la sortie. peut etre quelqu'un pourrai me donner un coup de main

                      my @outputFHs;
                      my $outputFHs;
                      for my $k (keys %{$data}) {
                        open $outputFHs[$_], ">", "$_.csv";
                        print $outputFHs[$_] "----$k----\n"; # le nom que porte mon fichier 
                        print $outputFHs[$_] "$k: $param->{$k}\n"; # ecrit le nom dans le fichier et la valeur du parametre
                        for my $i (0.. $#{$data->{$k}}) {
                          if ($param->{$k} ne $data->{$k}->[$i]->[1]) {
                            print $outputFHs[$_] "$data->{$k}->[$i]->[0]: $data->{$k}->[$i]->[1]\n"; # noms des data et leurs valeurs
                          }
                        }

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.