Erreur -39 fin de fichier

titigrou

Membre expert
Club iGen
23 Décembre 2004
1 091
26
40
Lille
Hello,

J'ai sollicité de l'aide hier pour un script pour lire le contenu d'un fichier texte et le stocker dans une variable.
Pas de problèmes jusque là, sauf que j'ai une superbe erreur lorsque je lance le script.

Bloc de code:
error "Erreur de fin de fichier." number -39 from file "Macintosh HD:Users:Antoine:Desktop:Programme:toto.txt"

Le fichier existe bien, il contient une ligne, j'ai bien fait un glisser déposer dans la fenêtre pour avoir le bon path.

J'ai essayé beaucoup de forums, mais en vain.
Voilà le code
Bloc de code:
set chemin_vers_le_fichier to "/Users/Antoine/Desktop/Programme/toto.txt"
open for access chemin_vers_le_fichier
set vartoto to read chemin_vers_le_fichier as string
close access chemin_vers_le_fichier
display dialog vartoto -- pour voir ta variable vartoto

Si quelqu'un a une idée...

Merci d'avance

Antoine
 
Bonjour,

As-tu essayé avec un autre fichier, car il s'agit d'une erreur dans ton fichier "toto.txt".

Sinon: Quel est ta version OS et Applescript ?, et peux tu transmettres ton fichier toto.txt que je puisse faire un essai avec ton fichier?
 
Je suis en Applescript 2.5 sous El Capitan.
J'ai essayé avec un autre fichier oui, en le recréant aussi.
Je peux pas mettre un .txt en pièce jointe, du coup je l'ai uploader ici
http://nowhere.lu/macg/
Dis moi si ça marche...
 
Avec ton fichier cela fonctionne.

Mais sous ElCapitan ma version AppleScript est la 2.8.1 (183.1)

Donc tu dois mettre à jour ton "Editeur de script".
 
J'ai Version 2.8.1
Applescript 2.5 dans la fenêtre d'information, donc potentiellement on a la même version!
 
Tu devrais essayer sur une autre session pour vérifier si c'est un problème général ou dans ta session .
 
Je viens d'essayer sur le macbook, ça marche...
Alors par contre j'ai une autre question, toujours par rapport à la lecture.
Mon fichier fait 10 lignes.
J'aimerai que:
La première ligne soit stockée dans la variable Vartoto1
La deuxième ligne soit stockée dans la variable Vartoto2
Les lignes 3 à 10 soient stockées dans la variable Vartoto3

C'est possible du coup?
 
Ca fonctionne parfaitement chez moi...
toto.txt.jpg
 
Je vais essayer sur une nouvelle session sur l'iMac.
Tu as une idée pour la seconde question pour la lecture par lignes?
 
Comme expliqué dans le lien de "remy" tu utilises un délimiters (dans ton cas un caractère 13 retour chariot) pour découper ta variable en une liste de X éléments (les lignes), puis tu récupères chaque éléments avec une boucle ou par un item.
 
Hum j'avoue que c'est un peu complexe le site là... Je bloque dès le départ!
Bloc de code:
try
    set monFichier to "/Users/Dev/Desktop/TESTLECTURE/toto.txt"
    open for access monFichier
    set tout_le_fichier to the result
    close access monFichier
on error
    display dialog "Erreur sur le fichier entré"
    close access monFichier -- Ne pas oublier de fermer le fichier
end try
display dialog tout_le_fichier

mais le display dialog me renvoie des valeurs aléatoires, genre 151, 157
Alors que le fichier contient "Bonjour antoine comment ça va?" (désolé pour l'imagination!).
 
Dernière édition:
Pour récupérer la ligne 1, puis la ligne 2 puis le reste dans des variables.

set monFichier to "/Users/Antoine/Desktop/Programme/toto.txt"
open for access monFichier
set vartoto to read monFichier
close access monFichier

display dialog vartoto -- affiche la variable texte integral du fichier

set NB to count of paragraph of vartoto --récupère le nombre de lignes

set vartoto1 to paragraph 1 of vartoto as string -- récupère la ligne 1
set vartoto2 to paragraph 2 of vartoto as string --récuoère la ligne 2
set vartoto3 to paragraphs 3 thru NB of vartoto as string --récupère de la ligne 3 à la fin du fichier

-- affiche les 3 variables pour contrôle
display dialog vartoto1
display dialog vartoto2
display dialog vartoto3

Chez moi ce script fonctionne. j'ai mis les commentaires et à la fin un affichage des 3 variables.
Plus qu'a l'adapter à tes besoins.
 
  • J’aime
Réactions: titigrou
Oh génial ça marche! Merci beaucoup!!
C'est chouette ça!
J'essaye de complexifier un peu le truc, avec un fichier qui ressemble à ça
Bloc de code:
Theoreme #1
Importance: +++
Il n’existe pas de nombres entiers non nuls x, y, z tels que:
x^n + y^n = z^n
dès que n est une entier strictement supérieur à 2
#### Fin du théorème ####
Theoreme #2
Importance: +++
Théorème d’Abel
Il n'existe pas de formule générale exprimant les solutions de l'équation du cinquième degré sous forme de radicaux.
#### Fin du théorème ####
Theoreme #3
Importance: +++
Théorème de Bezout
Soient a et b deux entiers relatifs
a et b sont premiers entre eux si et seulement si il existe deux entiers relatifs tels que
ax+by=1
#### Fin du théorème ####
et en fait j'aimerai que ça écrive d'abord dans
Var1 La ligne Théorème 1
Var 2 L'importance
Var 3 Le reste jusqu'à la ligne avant #### Fin du théorème ####

Et après la même chose pour le théorème 2 et 3, toujours dans Var 1, Var 2 et Var 3 (que on affichera du coup entre chaque théorème).
Je pensais faire quelque chose du genre je mets sur une ligne le nombre de lignes totales de mon ensemble théorème, mais il doit y avoir moyen de faire un STOP dès que on voit #### Fin du théorème #### j'imagine?
 
Si ce texte est fixe et définitif et donc n' évoluera plus, il suffit de compter le nombre de lignes et de le mettre dans le script qui récupère la variable.
Si par contre il doit évoluer dans le nombre de lignes, il faut récupérer à l'aide d'un délimiteurs ( #### Fin du théorème ####) par exemple chaque théorème dans une variable, puis traiter ces variables exactement dans le script actuel.
 
Oui ça peut évoluer car les théorèmes n'ont pas le même nombre de lignes!
Du coup en gros il faudrait un truc du genre
Boucle
Lire ligne 1
Lire ligne 2
Lire ligne 3 à Ligne #### -1
Fin boucle
et ça pour tous les théorèmes
Mais c'est cette histoire de délimiter je vois pas trop comment la gérer
 
Tous les théorèmes n'ont pas le même nombres de lignes, mais une fois écrit, il resteront tel quel.
un exemple qui t'écrit le théorème #1 de ton exemple de texte mis dans le fichier toto.txt:

set monFichier to "/Users/Antoine/Desktop/Programme/toto.txt"
open for access monFichier
set vartoto to read monFichier
close access monFichier

display dialog vartoto -- affiche la variable texte integral du fichier

set CR to (ASCII character 13) -- initialise la variable CR avec un retour chariot.

set vartoto1 to paragraph 1 of vartoto as string -- récupère la ligne 1
set vartoto2 to paragraph 2 of vartoto as string --récupère la ligne 2
set vartoto3 to paragraph 3 of vartoto & CR & paragraph 4 of vartoto & CR & paragraph 5 of vartoto as string --récupère de la ligne 3 à la ligne 5 du fichier

-- affiche les 3 variables pour contrôle
display dialog vartoto1
display dialog vartoto2
display dialog vartoto3


Edit: pour une initialisation à l'utilisation des délimiteurs voir la: http://jacquotdion.tripod.com/texte/textitemdelimit.html
 
Dernière édition:
Je viens d'essayer ton code avec le fichier contenant les théorèmes, le premier Display Dialog m'affiche hT et ensuite ça plante en disant
Bloc de code:
error "Impossible de convertir paragraph 2 of \"hT\" en type string." number -1700 from paragraph 2 of "hT" to string
 
Chez moi je viens de le refaire : pas de problème.
D' ou provient ton hT ??? : la première partie du code n'a pas changé depuis le début !
Revérifie tout ...