Aller au contenu


Photo

Récupérer liste des noms de fichiers .txt


  • Please log in to reply
36 réponses à ce sujet

#1 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 21 juin 2017 - 07:58

Ok Joanna, j'ai jeté un oeil aussi sur une vidéo qui traite de çà.

 

autre question : j'ai créé un bout de code pour remplir une Combobox dans laquelle je ne doit prendre que les fichiers dont l'extension est : ".txt", voilà mon code.

    // Fonction de recherche de fichiers avec extension : ".txt"
    func rechercheListeFichiers(folder: URL) {

        let showInvisibles: Bool = false
        let fileManager = FileManager.default

        do {

            let contents = try fileManager.contentsOfDirectory(atPath: folder.path)

            contenu = contents
                .filter { return showInvisibles ? true : $0.characters.first != "." }
                .map { $0.components(separatedBy: ".txt")[0]}

        } catch {

            print("erreurs")

        }
        
    }

Donc je ne prends que les fichiers qui ne commencent pas par "." et je ne prends que tout ce qui se trouve avant le ".txt" mais quelle est l'instruction qui m'empêche de prendre les fichiers qui n'ont pas l'extension ".txt" ?

 

Comment faites-vous ?

 

"contenu" est déclaré plus haut dans la Class



#2 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 21 juin 2017 - 08:44

C'est plus facile que ça :

  func getTextFileURLs(at folderURL: URL) -> [URL]
  {
    do
    {
      let directoryContents = try FileManager.default.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil, options: [])
      
      return directoryContents.filter{ $0.pathExtension == "txt" }
    }
    catch
    {
      print("errors")
    }
    
    return []
  }

Si tu ne voulais que les noms des fichiers, tu pourrais faire :

  func getTextFiles(at folderURL: URL) -> [String]
  {
    do
    {
      let directoryContents = try FileManager.default.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil, options: [])
      
      return directoryContents.filter{ $0.pathExtension == "txt" }.map{ $0.lastPathComponent }
    }
    catch
    {
      print("errors")
    }
    
    return []
  }


#3 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 21 juin 2017 - 09:25

merci,

 

avec '.map{ $0.lastPathComponent }', tu affiches le nom avec l'extension ?

 

et sans l'extension ?

 

PS : Moi qui n'avais jamais tenté de me lancer dans la pratique d'Objective-C et de Swift (maintenant), je me rends compte que c'est époustouflant ce que l'on peut faire et colossal comme logiciel.


  • iLandes aime ceci

#4 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 325 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 21 juin 2017 - 09:42

PS : Moi qui n'avais jamais tenté de me lancer dans la pratique d'Objective-C et de Swift (maintenant), je me rends compte que c'est époustouflant ce que l'on peut faire et colossal comme logiciel.


Ce sont des emprunts à la programmation fonctionnelle.
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#5 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 21 juin 2017 - 12:05

merci,

 

avec '.map{ $0.lastPathComponent }', tu affiches le nom avec l'extension ?

 

et sans l'extension ?

  func getTextFileNames(at folderURL: URL) -> [String]
  {
    do
    {
      let directoryContents = try FileManager.default.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil, options: [])
      
      return directoryContents.filter{ $0.pathExtension == "txt" }.flatMap{ $0.lastPathComponent.components(separatedBy: ".").first }
    }
    catch
    {
      print("errors")
    }
    
    return []
  }


#6 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 21 juin 2017 - 13:24

Je butte sur des trucs tout bête exemple :

 

comment vider une tableview ?



#7 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 21 juin 2017 - 13:41

Je butte sur des trucs tout bête exemple :

comment vider une tableview ?

Les NSTableViews ne contient aucune donnée.

Renvois 0 de la méthode numberOfRows(in:) du dataSource delegate

#8 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 21 juin 2017 - 14:01

Je m'explique :

dans mon viewController j'ai un tableview que je rempli au départ avec des données tirées d'internet mais comme ces données évoluent toutes les 10 mn je clique sur un bouton pour relancer l'extraction des ces données et je les ré-affiche mais encore faut'il que je rase celles qui y sont déjà.

 

Peut-être faut-il que je les élimine avec une boucle for ou while ?



#9 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 21 juin 2017 - 14:03

Tu ne dois pas "remplir" le tableView. Tu devrais l'alimenter d'un delegate NSTableViewDataSource



#10 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 25 juin 2017 - 08:29

Bonjour,

Après un break brico et une prise de tête pour trouver comment ôter les données affichées dans la tableView, je vous sollicite car je n'ai pas encore trouvé la solution et ce n'est pas faute d'avoir essayé. :snif:

 

Je me suis basé sur le prog "FileViewer" et je l'ai fait défiler pas à pas sans succès.

 

Je dois oublier quelque chose dans mon raisonnement.



#11 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 804 messages
  • LocationParis

Posté 25 juin 2017 - 10:25

Bonjour,

Après un break brico et une prise de tête pour trouver comment ôter les données affichées dans la tableView, je vous sollicite car je n'ai pas encore trouvé la solution et ce n'est pas faute d'avoir essayé. :snif:

 

Qu’est-ce qu’une tableView ? Un composant graphique servant à afficher des données. Mais il ne contient aucune donnés en lui même. Elles lui sont fournies par une dataSource, une source de données, un tableau par exemple. La tableView n’est que la représentation graphique des informations contenues dans le tableau.

 

Pour « vider » une tableView, tu vides le tableau ou tu changes son contenu. Ensuite tu appelle la méthode reloadData() de la tableView., qui signifie « ton contenu est devenu obsolète. Il faut recharger toutes les données à partir de la dataSource ».

 

https://developer.ap...kit/uitableview


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#12 Joanna Carter

Joanna Carter

    Broyeur de fèves

  • Contrôleur d'arômes
  • 1 999 messages
  • LocationPlestin-les-Grèves (22)

Posté 25 juin 2017 - 11:21

Bone tuto sur NSTableView ici : https://www.raywende...leview-tutorial

 

Avec les liens vers les autres infos dans la section "Where to Go From Here"



#13 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 25 juin 2017 - 13:50

Bone tuto sur NSTableView ici : https://www.raywende...leview-tutorial

 

C'est le tuto dont je fais référence dans mon dernier post mais j'ai trouvé (enfin) mon erreur, il y avait une variable que je ne remettais pas à "rien" donc il y avait un cumul de lignes à la suite.

 

Ouf, je vais pouvoir continuer mon apprentissage.

 

A plus tard !! et merci         :bravo!:  :bravo!:  :bravo!:



#14 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 28 juin 2017 - 15:16

Bonjour,

Pour extraire une donnée que la tableview affiche il faut donc se rapporter à la variable "tableau" qui remplie cette tableview, c'est cela ?



#15 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 325 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 28 juin 2017 - 15:19

Oui, c'est cela.
RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#16 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 29 juin 2017 - 09:38

Bonjour,

Maintenant je dois remplacer un élément d'un tableau du genre

 

Voilà ce que j'ai dans ma variable tableau position 0 :

TB[0] = "01:00;PAYS;Importance;Libéllé"

Je fais ensuite un 

 

TB[0].components(separatedBy: ";")

 

et je me retrouve avec un nouveau tableau de l'élément TB[0]:

 

TBInter = ["01:00","PAYS","Faible","Libéllé"]

 

 

Là, je voudrais changer "Faible" par "Forte"

 

Je crois que c'est l'instruction "replaceSubrange" qu'il faut utiliser ?

 

Je voudrais changer en fait tout ce qui se trouve dans la position 2 entièrement peu importe le texte qui s'y trouve



#17 Céroce

Céroce

    Mouleur de chocolats

  • Contrôleur d'arômes
  • 5 325 messages
  • LocationSaint-Leu-d'Esserent / France

Posté 29 juin 2017 - 10:40

Ton approche est mauvaise.

Quand on reçoit un JSON, par exemple:
 

"personnes" = [
  "nom": "Dupont",
  "prenom": "Jean"
]

On ne s'amuse pas à décomposer le JSON à chaque fois. Non, on le parse une fois, dans le but d'avoir des classes ou des struct de la forme:
 

struct Personne {
  let nom: String
  let prenom: String
}

Si à la fin, on veut enregistrer le fichier, alors on reconvertit la liste de Personnes en JSON.

Dans ton cas, c'est pareil: n'essaie pas de changer des bouts de texte. Parcours le texte une fois, extrais des objets. Ensuite, c'est facile de modifier les objets.

P.S. Cocoa utilise l'architecture MVC: https://developer.ap...oaCore/MVC.html
Comprends que ta liste fait partie du Modèle.


RenaudPradenc.com Je suis développeur iOS & Mac indépendant.

#18 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 804 messages
  • LocationParis

Posté 29 juin 2017 - 10:45

et je me retrouve avec un nouveau tableau de l'élément TB[0]:

 

TBInter = ["01:00","PAYS","Faible","Libéllé"]

 

 

Là, je voudrais changer "Faible" par "Forte"

 

 

a

Rien de plus simple, puisque TBInter est un tableau de String. Tu modifie juste son contenu à l’index 2.

a

TBInter[2] = "Le nouveau contenu"

a


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 


#19 Patyom

Patyom

    Cueilleur de cabosses

  • Membre
  • PipPipPip
  • 86 messages

Posté 29 juin 2017 - 11:20

J'ai cogité çà pendant le repas et j'allais l'appliquer quand j'ai lu ton post.

 

Mais dans quels cas emploie-t'on les fonctions "replaceSubrange"



#20 Draken

Draken

    Mouleur de chocolats

  • Artisan chocolatier
  • PipPipPipPipPipPipPipPip
  • 8 804 messages
  • LocationParis

Posté 29 juin 2017 - 11:35

 

Mais dans quels cas emploie-t'on les fonctions "replaceSubrange"

a

Quand il faut modifier partiellement le contenu d’une chaîne unique.

 

Par exemple, remplacer « Stark » par « Targaryen » dans le texte « John Snow est un Stark ! ».

a

let texte1 = "Jonh Snow est un Stark ! "
let texte2 = texte1.replacingOccurrences(of: "Stark", with: "Targaryen")
print ("Avant : ", texte1)
print ("Aprés : ", texte2)

a

 

Avant :  Jonh Snow est un Stark ! 

Aprés :  Jonh Snow est un Targaryen ! 

 

 

a


Garçon, servez-moi un Covfefe avec du lait de soja, sans OGM ..

Et faites régler la climatisation, il fait bien chaud, ici !

 

 

Éternel Novice !  :baby:

Tueur de poneys !  :(

 

Faire simple .. c'est compliqué !

Faire compliqué .. c'est simple !

 

Un MOOC (cours en ligne - dont je ne suis pas l'auteur) gratuit sur la programmation en Obj-C et en Swift 3, démarrant le 14 Mars 2017 :

https://www.edx.org/...onnex-progios1x

 

Des dizaines d'heures de tutoriels vidéo en français (je ne suis pas l'auteur) pour apprendre à développer en Obj-C et Swift : http://pagesperso-sy...don/5I452-2014/

 

 





0 utilisateur(s) li(sen)t ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)