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

Langage PHP Discussion :

extraire le nom d'un fichier et son répertoire parent


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut extraire le nom d'un fichier et son répertoire parent
    Bonjour à Tous

    Je patine dans la semoule et je n'arrive pas à trouver une solution pouvant être exécutée en batch ou avec un petit exécutable

    je me suis tourné vers sed regex sans pour autant avancer pour trouver une solution

    Pour mettre à jour une base de données j'ai besoin de modifier dans toute une colonne d'un fichier csv la chaîne qui contient le chemin complet d'un document pour n'en extraire que le nom du fichier+le répertoire parent immédiat

    par exemple:

    table/Documentation/Balisage feux colregs/Texte COLREG RIPAM E-Book/index.html

    je ne veux extraire que

    Texte COLREG RIPAM E-Book/index.html

    Bien sûr tous les chemins étant différents on ne peut pas travailler sur des longueurs fixes;

    Je précise que je fais ce programme pour aider mes élèves à trouver la bonne documentation mais que je ne suis pads informaticien, même si je développe en php.

    L'idéal serait soit d'avoir une fonction PHP ou java que je mettrais sur le site soit un exe soit un batch


    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    vous pouvez essayer cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $texte = " table/Documentation/Balisage feux colregs/Texte COLREG RIPAM E-Book/index.html";
     
    // découpage suivant le caractères /
    $tableau = explode("/", $texte);
     
    // récupération des 2 derniers éléments
    $tableau = array_slice($tableau, -2);
     
     
    /*
    $tableau[0] contient "Texte COLREG RIPAM E-Book"
    $tableau[1] contient "index.html"
    */

  3. #3
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Merci Mathieu

    Je ne vois pas comment le faire en PHP

    je m'explique; c'est un peu compliqué à expliquer mais je vais essayer

    Dans une base de données mysql j'ai une liste des documents que je classe par ordre d'importance (exemple à lire une fois, sujet d'examen etc)

    avec exiftools j'extrais le nom des fichiers dans un csv (avec d'autres info) (je leur ai fait un batch)

    Tout va bien pour les fichiers pdf doc excel etc... car le nom de fichier est différent pour chaque document

    Mais "bug" pour les fichiers index.html car ils ont un nom identique et seul le répertoire permet après concaténation avec le nom de fichier de recréer un nom unique exemple Texte COLREG RIPAM E-Book_index.html

    Mon explication n'est pas top


    Le pb est que l'élève ne dispose pas forcément d'outil externe ou n'a pas la formation pour bidouiller par un recherche remplace dans une chaîne

    Il faut donc que j'ai une solution "en appuyant sur un bouton"


    La solution php n'est pas top car il faut que la modif se fasse sur son fichier d'import sur son PC

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Tout va bien pour les fichiers pdf doc excel etc... car le nom de fichier est différent pour chaque document
    Tu vas forcément un jour être embêté avec ça.

    Concernant la solution du dossier parent, on peut imaginer que ce dernier peut également être en double
    Ex. /path/to/Livre-1/Ch-1/index.html et /path/to/Livre-2/Ch-1/index.html
    Ch-1/index.html est un doublon

    Tous les fichiers sont-ils stockés au même endroit ?
    Pourquoi ne pas transmettre le chemin complet des fichiers ?
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Bonsoir

    Non ils sont classés et hiérarchisés dans des répertoires différents

    Le chemin change car l'élève peut les implanter à des endroits différents

    le tronc commun c'est le nom du fichier mais index.html étant commun à tout le monde il faut que je le concatène avec le répertoire parent


    On devrait pouvoir y arriver avec regex, mais je ne le pratique pas et pour le moment je patine

    ou alors on éclate dans un tableau avec le / comme séparateur mais je ne sais pas faire en batch

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par ODYSSEUS13 Voir le message
    Non ils sont classés et hiérarchisés dans des répertoires différents
    Le chemin change car l'élève peut les implanter à des endroits différents
    Oui, mais sur un même serveur, non ? Si tel est le cas alors le chemin complet d'un fichier est forcément unique.

    le tronc commun c'est le nom du fichier mais index.html étant commun à tout le monde il faut que je le concatène avec le répertoire parent
    Je ne comprends pas. J'ai l'impression que tu prends le problème à l'envers. Et je t'ai expliqué que le couple (dossier parent ; fichier) peut aussi être en doublon.

    On devrait pouvoir y arriver avec regex, mais je ne le pratique pas et pour le moment je patine
    On n'en est pas là

    ou alors on éclate dans un tableau avec le / comme séparateur mais je ne sais pas faire en batch
    C'est la solution proposée par mathieu plus haut.

    Je ne sais pas sur quel système tu tournes (Windows ? Linux ?), et quelles sont les conditions d'appel de ton batch. Mais j'imagine que tu peux appeler de la même manière un script PHP, tout simplement.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Non, je répète, le chemin complet qui est la solution la plus simple n'est pas possible

    Je peux expliquer, mais cela va nous prendre un moment

    La raison principale c'est que le document référencé peut se balader dans n'importe quel répertoire du système d'exploitation alors qu'il est stable sur la racine du site

    Pour info, nous utilisons un site en, localhost qui peut se transporter d'un ordinateur à un autre sur une clef USB

    Par ailleurs le PHP ne permet pas de modifier un fichier sur un répertoire en dehors du serveur


    Donc pour en revenir à mon problème, je cherche à faire ou trouver un utilitaire pour extraire dans une chaîne de caractère le nom du fichier avec le répertoire parent

    Je ne maitrise pas assez le batch (sous dos) ni les règles du regex donc une piste me serait utile

  8. #8
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Ton organisation et ton problème ne sont pas clairs.
    Si finalement la solution en PHP ne te convient pas alors il faudrait mieux aller voir du côté des spécialistes batch / Windows.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  9. #9
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Le problème est très clair

    dans un fichier il faut extraire un nom de fichier et son répertoire parent

    Le php ne convient pas car le php n'écrit pas sur le disque client

    il y a des solutions en python assez clair à comprendre avec des commandes explode ou split mais je ne connais pas le python


    regex peut le faire

    voici ce que j'ai trouvé

    \/.*\/([^\/]*$)

    le pb c'est qu'il me lit tous les / alors que je voudrais qu'il s'arrête aux deux derniers

    je vais allez voir sur le forum regex

  10. #10
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Le php ne convient pas
    Une solution t'a déjà été proposée.
    Je ne sais pas pourquoi tu t'obstines à poster ici si PHP ne convient pas.

    il y a des solutions en python assez clair
    Python n'écrira ni plus ni moins que PHP sur le "disque client".

    PS : à mon avis on est en plein dans un truc de ce genre https://fr.wikipedia.org/wiki/Problème_XY
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  11. #11
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Bonjour Sèb

    effectivement je me suis trompé de forum car celui-ci est dédié au php

    Ceci étant quand on pose une question ce n'est pas pour avoir une réponse qui modifie fondamentalement un projet et sur laquelle on perd du temps à argumenter

    si je n'emploie pas un chemin complet c'est que dans l'ensemble du projet ce n'est pas compatible

    Maintenant j'approche d'une solution avec le regex suivant


    \/.*\/([^\/]*\/index.html)

    reste à l'inclure soit dans l'exiftools soit dans mysql ou tout autre suggestion bienvenue

    En tout cas merci de votre aide

  12. #12
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    Citation Envoyé par ODYSSEUS13 Voir le message
    Pour mettre à jour une base de données j'ai besoin de modifier dans toute une colonne d'un fichier csv...
    C'est à mon avis, là où ce n'est pas clair :
    on doit modifier quoi ?
    • la base de données
    • ou le fichier CSV ?

    Une solution serait effectivement de modifier la base de données (dons EN AMONT), avant la création du CSV, non ?

    Si on conserve la colonne contenant l'URL complète (ce qui parait normal), on peut :
    • soit, AU MOMENT DE l'INSERT en Bdd, créer une AUTRE colonne, qui ne contiendra QUE "dossier-parent/nom-fichier" (pour les lignes existantes -> par UPDATE)
    • soit, AU MOMENT DE la création du csv (automatique ?), utiliser (effectivement) une REGEX (SQL) pour n'extraire de l'URL complète QUE "dossier-parent/nom-fichier"

  13. #13
    Membre du Club
    Homme Profil pro
    particulier
    Inscrit en
    Décembre 2017
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Décembre 2017
    Messages : 105
    Points : 56
    Points
    56
    Par défaut
    Bonjour Jreaux

    Désolé si ce n'est pas clair

    on modifie le csv en amont qui contient notamment deux colonnes

    sourcefile (chemin complet) et file name (nom du fichier)


    on extrait du chemin complet le nom du fichier avec son extension et le répertoire parent immédiat pour obtenir un nouveau filename qui est au résultat cette apparence répertoire parent_index.html

    (bien sur on a remplacé le / par un _ )

    Mais je suis en train de trouver une solution merci

  14. #14
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Juste une remarque en passant:
    Par ailleurs le PHP ne permet pas de modifier un fichier sur un répertoire en dehors du serveur
    C'est faux, certes PHP s'exécute la plupart du temps sur un serveur et effectivement dans ce cas il n'a accès avec ses fonctions de manipulation de fichiers qu'à l'arborescence du dit serveur.
    Mais PHP peut aussi s'utiliser en ligne de commande et dans ce cas, il n'y a pas cette limitation.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. Récupérer le nom d'un fichier avec son chemin
    Par hacksi dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2008, 17h39
  2. Réponses: 4
    Dernier message: 21/03/2008, 09h06
  3. Séparer le nom d'un fichier de son extension
    Par codial dans le forum Delphi
    Réponses: 3
    Dernier message: 16/03/2007, 18h29
  4. Extraire le nom d'un fichier de son chemin
    Par azopei dans le forum Access
    Réponses: 6
    Dernier message: 21/01/2006, 17h29
  5. extraire le nom d'un fichier dans une chaine sauf le car -
    Par digger dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 13/12/2005, 00h02

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