Erreur -39 fin de fichier

Bah écoute je viens de tester à nouveau sur le macbook et ça marche... Je comprends vraiment pas pourquoi sur l'imac ça ne veut pas fonctionner...
Alors après, pour la lecture en boucle et la délimitation, j'avoue avoir un peu de mal à voir...
 
Pour la boucle, j'ai fait un truc comme ça
Bloc de code:
set x to 5
set y to 3
repeat until x = y
    set vartoto3 to paragraph y of vartoto & CR
    set y to y + 1
end repeat
Après ça implique que tous mes théorèmes aient le même nombre de lignes aussi...
 
Pour pouvoir t'aider, j'aurais besoin de connaître le contenu de ton fichier texte et de comprendre la finalité de ton script.
Il va faire quoi de ces variables ? ou et comment ?
Quel est le but de ce script ?
Il récupère ce qu'il y a dans le fichier, il le découpe etc... mais pour en faire quoi ?
 
En gros, mon fichier toto.txt va contenir des données de livres, organisées comme ceci
Ligne 1: Titre du livre numéro 1
Ligne 2: Prix du livre numéro 1
Ligne 3 à n: Résumé du livre numéro 1

Ligne n+1: ######
Ligne n+2: Titre du livre numéro 2
Ligne n+3: Prix du livre numéro 2
etc etc etc

La finalité étant de lancer le script pour copier le contenu de chaque livre dans un fichier unique.
Fichier 1: les infos du livre 1.
Fichier 2: les infos du livre 2.
Fichier p les infos du livre p.

le but étant de générer au final un fichier xml par livre, mais cette partie là je vais gérer, j'ai juste besoin de débrouiller la partie applescript.

Je te mets en exemple de toto.txt là (mes derniers livres en cours de lecture).

Bloc de code:
1Q84 Tome 1
10 Euros
Résumé du livre:
Au Japon, en 1984.
C'est l'histoire de deux mondes, celui réel de 1984 et un monde parallèle tout aussi vivant, celui de 1Q84. Deux mondes imbriqués dans lesquels évoluent, en alternance, Aomamé et Tengo, 29 ans tous deux, qui ont fréquenté la même école lorsqu'ils avaient dix ans.
############
1Q84 Tome 2
12 Euros
Résumé du livre:
Les choses qui restent enfermées dans notre coeur n'existent pas en ce monde. Mais c'est dans notre coeur, ce monde à part, qu'elles se construisent pour y vivre.
Le Livre 1 a révélé l'existence du monde 1Q84.
Certaines questions ont trouvé leur réponse.
D'autres subsistent : qui sont les Little People ? Comment se fraient-ils un chemin vers le monde réel ? Pourquoi deux lunes dans le ciel ?
############
1Q84 Tome 3
15 Euros
Résumé du livre:
Ils ne le savaient pas alors, mais c'était là l'unique lieu parfait en ce monde. Un lieu totalement isolé et le seul pourtant à n'être pas aux couleurs de la solitude.
Le Livre 3 fait entendre une nouvelle voix, celle d'Ushikawa.
Et pose d'autres questions : quel est ce père qui sans cesse revient frapper à notre porte ? La réalité est-elle jamais véritable ? Et le temps, cette illusion, à jamais perdu ?
 
Je comprend mieux.
Mais alors quel intérêt de séparer les lignes, pourquoi ne pas copier directement ce qu'il y a entre chaque "############" pour en faire un fichier?


Ce simple script devrait faire l'affaire:

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

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



set AppleScript's text item delimiters to "############" -- défini la fin d'un livre
set NBLivre to (count of text item of vartoto) as string -- défini le nombre de livres

display dialog NBLivre -- affiche le nombre de livres trouvés


repeat with j from 1 to NBLivre

set lelivre to text item j of vartoto as string

display dialog lelivre -- affiche chaque livre

end repeat

Dis moi ce qui ne te conviens pas.
 
Dernière édition:
Pour la mise en forme après.
Tu veux dire faire un copier en Apple script? Mais dans tous les cas il faudra délimiter.
 
Je viens d'éditer essai le script pour voir !
 
Je viens de voir! C'est presque ça, il manque juste le fait que il me faudrait dans une variable Var1 le titre, dans Var2 le prix et Var3 le résumé.
 
OK essai avec celui là.

set monFichier to "/Users/Antoine/Desktop/Fichier_test_roman.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 AppleScript's text item delimiters to "############"
set NBLivre to (count of text item of vartoto) as string

display dialog NBLivre -- affiche le nombre de livres


repeat with j from 1 to NBLivre

set vartoto1 to ""
set vartoto2 to ""
set vartoto3 to ""
set lelivre to text item j of vartoto as string
set NB to count of paragraph of lelivre --récupère le nombre de lignes


set ligne1 to 1
set ligne2 to 2
set ligne3 to 3
if j > 1 then
set ligne1 to 2
set ligne2 to 3
set ligne3 to 4
end if
set vartoto1 to paragraph ligne1 of lelivre as string -- récupère la ligne 1
set vartoto2 to paragraph ligne2 of lelivre as string --récupère la ligne 2

repeat with i from ligne3 to NB
set varligne to paragraph i of lelivre as string --récupère de la ligne 3 à la ligne x du fichier
set vartoto3 to vartoto3 & CR & varligne
end repeat

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

Chez moi ça fonctionne...
 
Hummm, si tu étais pas loin de chez moi, je te dirai "Viens manger un welsh et boire une bière!"
Merci infiniment, ça semble marcher du tonnerre! Je vais essayer de comprendre le code intégralement, ça fera un bon exercice!
 
Content pour toi que cela te convienne.
As-tu réussi à faire fonctionner ton Imac, as-tu fais un essai sur une autre session, éventuellement une toute neuve créé pour le besoin et à effacer après.
Si ça fonctionne sur une autre session il faudra peut être virer le Plist de ta session qui se trouve dans "/users/antoine/library/preferences/com.apple.applescript.plist"
 
Je te remets le code avec tous les commentaires qui te permettront de mieux comprendre et de pouvoir le modifier à ta convenance.

set monFichier to "/Users/Antoine/Desktop/Fichier_test_roman.txt" -- récupère le chemin du fichier
open for access monFichier -- ouvre ce fichier en lecture
set vartoto to read monFichier -- lit le fichier et le met dans la variable vartoto
close access monFichier -- ferme le fichier

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 AppleScript's text item delimiters to "############
" -- défini le délimiteur de fin de livre avec 12 # + 1 retour chariot

set NBLivre to (count of text item of vartoto) -- compte le nombre de livres trouvé

display dialog NBLivre -- affiche le nombre de livres

repeat with j from 1 to NBLivre -- boucle avec nombre de livre dans j
-- met les 3 variables à vide
set vartoto1 to ""
set vartoto2 to ""
set vartoto3 to ""

set lelivre to text item j of vartoto as string -- récupère la totalité du livre j dans la variable
set NB to count of paragraph of lelivre --récupère le nombre de lignes du livre j

set vartoto1 to paragraph 1 of lelivre as string -- récupère la ligne 1
set vartoto2 to paragraph 2 of lelivre as string --récupère la ligne 2

repeat with i from 3 to NB -- boucle avec le nombre de ligne du livre dans la variable i de la troisième à la fin
set varligne to paragraph i of lelivre as string --récupère de la ligne 3 à la ligne x du livre j en remettant les retours chariot de fin de ligne
set vartoto3 to vartoto3 & CR & varligne -- reconstruit la variable vartoto3
end repeat

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

bon courage.
 
Hello (again!)

Je reviens vers toi car j'ai une dernière petite question pour le code sur lequel tu m'avais bien aidé!
En fait j'aimerai que à la fin du traitement que ça m'envoie un mail résumé.
J'ai trouvé comment faire, mais le problème c'est que ça m'envoie 3 mails (il y a 3 livres dans le fichier d'entrée).
J'aimerai que ça en fasse un seul avec les 3 livres dans le même mail, sur 3 lignes séparées.
Je te mets le code que j'utilise pour le tout!
Le titre du livre est dans vartoto1.

Bloc de code:
set monFichier to "/Users/Antoine/Desktop/Programme LBC Local/Livres.txt"
open for access monFichier -- ouvre ce fichier en lecture
set vartoto to read monFichier -- lit le fichier et le met dans la variable vartoto
close access monFichier -- ferme le fichier

--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 AppleScript's text item delimiters to "############
" -- défini le délimiteur de fin de livre avec 12 # + 1 retour chariot

set NBLivre to (count of text item of vartoto) -- compte le nombre de livres trouvé

--display dialog NBLivre -- affiche le nombre de livres

repeat with j from 1 to NBLivre -- boucle avec nombre de livre dans j
    -- met les 3 variables à vide
    set vartoto1 to ""
    set vartoto2 to ""
    set vartoto3 to ""
   
    set lelivre to text item j of vartoto as string -- récupère la totalité du livre j dans la variable
    set NB to count of paragraph of lelivre --récupère le nombre de lignes du livre j
   
    set vartoto1 to paragraph 1 of lelivre as string -- récupère la ligne 1
    set vartoto2 to paragraph 2 of lelivre as string --récupère la ligne 2
   
    repeat with i from 3 to NB -- boucle avec le nombre de ligne du livre dans la variable i de la troisième à la fin
        set varligne to paragraph i of lelivre as string --récupère de la ligne 3 à la ligne x du livre j en remettant les retours chariot de fin de ligne
        set vartoto3 to vartoto3 & CR & varligne -- reconstruit la variable vartoto3
    end repeat

    set Message_1 to "Bonjour,

Les fiches suivantes ont été crées:
    
     "
    set Message_2 to vartoto1
    tell application "Mail"
       
        set myDate to date string of (current date)
        set myTime to time string of (current date)
       
        set theSubject to "Créations de fiches livres"
        set theAddress to "[email protected]" -- the receiver
        set theSignatureName to "Sig" -- the signature name
       
       
        set LeMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:Message_1 & " " & Message_2 & " " & myDate & " à " & myTime & "."}
       
       
       
        tell LeMessage to make new to recipient at end of every to recipient with properties {address:theAddress}
       
        set message signature of LeMessage to signature theSignatureName
       
        --send LeMessage
    end tell
   
   
end repeat

Merci encore pour ton aide!
Antoine
 
Bonsoir,
Il te faut construire ton message dans une variable envoi l'envoi.

1- Tu initialises la variable MessageEntier à
"Bonjour,

Les fiches suivantes ont été crées:

"
" au début du script

2- tu mets: juste avant Tell application mail

set MessageEntier to MessageEntier & Message_2 & CR
End repeat

3- tu modifies:
set LeMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:Message_1 & " " & Message_2 & " " & myDate & " à " & myTime & "."}
en
set LeMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:MessageMessageEntier & " " & myDate & " à " & myTime & "."}

4- Tu supprimes le End repeat de la fin.



tu devrais obtenir ça:

set monFichier to "/Users/Antoine/Desktop/Programme LBC Local/Livres.txt"
open for access monFichier -- ouvre ce fichier en lecture
set vartoto to read monFichier -- lit le fichier et le met dans la variable vartoto
close access monFichier -- ferme le fichier

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

Set MessageEntier to "Bonjour,

Les fiches suivantes ont été crées:

"

set CR to (ASCII character 13) -- initialise la variable CR avec un retour chariot.
set AppleScript's text item delimiters to "############
" -- défini le délimiteur de fin de livre avec 12 # + 1 retour chariot

set NBLivre to (count of text item of vartoto) -- compte le nombre de livres trouvé

--display dialog NBLivre -- affiche le nombre de livres

repeat with j from 1 to NBLivre -- boucle avec nombre de livre dans j
-- met les 3 variables à vide
set vartoto1 to ""
set vartoto2 to ""
set vartoto3 to ""

set lelivre to text item j of vartoto as string -- récupère la totalité du livre j dans la variable
set NB to count of paragraph of lelivre --récupère le nombre de lignes du livre j

set vartoto1 to paragraph 1 of lelivre as string -- récupère la ligne 1
set vartoto2 to paragraph 2 of lelivre as string --récupère la ligne 2

repeat with i from 3 to NB -- boucle avec le nombre de ligne du livre dans la variable i de la troisième à la fin
set varligne to paragraph i of lelivre as string --récupère de la ligne 3 à la ligne x du livre j en remettant les retours chariot de fin de ligne
set vartoto3 to vartoto3 & CR & varligne -- reconstruit la variable vartoto3
end repeat

set Message_2 to vartoto1
set MessageEntier to MessageEntier & Message_2 & CR
End repeat

tell application "Mail"

set myDate to date string of (current date)
set myTime to time string of (current date)

set theSubject to "Créations de fiches livres"
set theAddress to "[email protected]" -- the receiver
set theSignatureName to "Sig" -- the signature name


set LeMessage to make new outgoing message with properties {visible:true, subject:theSubject, content:MessageEntier & " " & myDate & " à " & myTime & "."}



tell LeMessage to make new to recipient at end of every to recipient with properties {address:theAddress}

set message signature of LeMessage to signature theSignatureName

--send LeMessage
end tell
 
Dernière édition:
Content pour toi !