Gambas France BETA


Pas de compte ? Incription

Un petit pasage à vide...

Ce sujet est résolu.

1
AuteurMessages
Foromus#1 Posté le 21/6/2023 à 18:00:43
Bonjour à tous,

Soit un fichier texte, génialement appelé "Monfichier.txt"
Normalement, il est prévu de le remplir avec des éléments au nom tout aussi sophistiqué, style "eleman1.txt", etc.
Là, je sais faire, avec For Append.

Côté utilisation, j'ai besoin de tester si un élément quelconque du fichier correspond à la variable String "ma_reference "
J'ai pensé que la formule :

Dim FileNam As String
For Each FileName In Application.Path & "..../Repertoire/Monfichier.txt
If ma_reference = elemanN.txt Then Print "Trouvé"
Next

Le For Each est incomplet ou erroné, et c'est là que je bute.
L'erreur me signale que "Monfichier.txt" n'est pas un répertoire ou autre chose quand je change de syntaxe.
Je comprends d'autant moins que j'ai déjà utilisé For Each un certain nombre de fois, sans soucis. Mais ça ne devait pas être dans les mêmes conditions et je ne retrouve pas de cas similaire dans mes projets, mais je ne les ai pas tous parcourus ! Après,il est possible que le logiciel considère "elemanN.txt" comme un fichier (et c'est le cas !), mais dans ce cas précis ici, ce n'est simplement qu'une chaîne de caractères : il faudrait peut-être alors, utiliser les guillemets quelque part... Ou faire autrement...

Merci de votre aide !

spheris#2 Posté le 22/6/2023 à 04:50:40
Foromus,
Essayons de comprendre cette ligne :

1
FOR EACH FileName IN Application.Path & "..../Repertoire/Monfichier.txt"


Pour chaque 'NOM DE FICHIER' dans le répertoire "...../repertoire/unfichiertexte"

Tu cherches un nom de fichier dans un fichier texte? c'est bien cela?

Si oui :

A) En supposant que chaque nom dans ton fichier soit séparé par des retours à la ligne :


1
2
3
4
5
6
7
8
DIM monfichier AS STRING
DIM Maliste AS NEW String[]
DIM Filename AS STRING
monfichier = File.load("...repertoire/Monfichier.txt")
Maliste = Split(monfichier,"\n")
FOR EACH FileName IN Maliste
IF FileName = mareference THEN PRINT "Trouvé"
NEXT



Ou alors , le problème serait le suivant à savoir:
Tu cherches un nom de fichier dans un répertoire qui a un nom bien précis.

B) Dans cette liste de fichiers à parcourir. Il suffit d'écrire :


1
2
3
4
5
6
DIM ma_reference AS STRING
DIM monchemin AS STRING
monchemin = Application.Path & "..../Repertoire/"
FOR EACH ma_reference IN Dir(monchemin)
IF ma_reference = elemanN.txt THEN PRINT "Le fichier existe"
NEXT


A bientôt.
;)




vuott#3 Posté le 22/6/2023 à 12:24:21
Ne cedere ineluctabili possimusEn effet, comme l'a montré "spheris", en utilisant la boucle "FOR......EACH", le deuxième membre (dans lequel on recherche une référence) doit être un array, sinon vous obtiendrez une erreur.
« Vita non suavis esse potest, nec Mors amara. »
Foromus#4 Posté le 24/6/2023 à 12:20:38
Bonjour à tous,

Merci pour les renseignements !
J'ai utilisé la première partie du code de spheris et ai solutionné mon problème.
J'ai des lacunes :
Je ne vois pas trop la différence (hormis la syntaxe...), entre String et NewString[]... Quoique les [] font référence à un tableau il me semble.
Pas + que je ne maîtrise la commande Split (pourtant, j'ai vu ça quelque part, probablement utilisée...).
Voilà un truc résolu, je refais une autre demande.

Merci à vous !
spheris#5 Posté le 26/6/2023 à 20:01:24
Pour simplifier,

String est une variable texte unique qui contient une chaine de caractère.
String[] est un tableau de plusieurs String

Important de bien mettre le New devant String[] tout simplement car tu crées un nouveau tableau.

Un petit exemple :

1
2
DIM montexte AS STRING = "TOTO"
DIM montableau AS NEW String[] = ["toto","tata","titi"]


Ainsi
1
PRINT montexte

te renverra dans la console: TOTO

1
PRINT montableau[1]

te renverra dans la console: tata

;)
1