Nous allons faire une sauvegarde de nos données dans un fichier texte tabulé.
Chaque rangée de la data source sera une ligne du fichier texte terminé par un CR (Carriage Return, code ASCII character 13).
Chaque donnée dans la ligne sera séparée par un TAB (Tabulation, code ASCII character 9).
Nous allons traiter dans l'ordre :
Important pour avoir une synchronisation des données entre data source, p-list et BackUp du fichier texte.
Ce fait simplement par l'appel de la subroutine stockerAllNotesInPlist.
set ListeDeToutesLesNotes to content of contents of notesDataSource as list
Notez bien, il faut content of contents of . Si vous mettez que contents of vous obtenez l'adresse. Et attention au "s" à contents .
En premier, connaître le nombre de lignes.
set NbLines to (count of ListeDeToutesLesNotes )
Puis faire la repeat.
repeat with i from 1 to NbLines
set une_ligne_record to item i of ListeDeToutesLesNotes
Les données sont récupérées sous forme de record pour être indépendant de leur position dans la ligne. Rappel, un record c'est le couple nom-valeur.
Pour chaque donnée, nous ajoutons le Tab.
set leNom to |Name | of une_ligne_record & tab
Sauf la dernière donnée où il faut un CR.
set LaCol6 to |Col6 | of une_ligne_record & return
Maintenant, construisons la ligne entière texte.
set lineWithTab to leNom & laDescription & laDate & lePrix & laCol5 & LaCol6
Et enfin, cumulons les lignes dans une variable.
set dataFichierFinal to dataFichierFinal & lineWithTab
Nos données, stockées dans une liste, sont prétes à être écrite dans le fichier.
Notons que cette méthode, la plus simple à programmer, peut être consommatrice en page virtuelle, si vous avez beaucoup de données. Jusqu'à un millier de lignes, c'est peu sensible. Au-delà, il est probablement mieux d'écrire dans le fichier sorti ligne par ligne.
La commande display save panel est prévue pour obtenir le chemin d'accès au fichier choisi.
set nomPropose to "MonLogiciel BackUp ladate"
set leResultat to display save panel in directory "MonLogiciel" with file name nomPropose
in directory et file name sont optionnels, mais bien pratiques.
Il faut tester si la commande c'est bien passée ou terminée par un "Cancel".
if leResultat is 1 then -- SAVE = 1, CANCEL = 0
set leNomDuFichier to POSIX file (path name of save panel) as string
C'est la transformation du chemin d'accès du format POSIX en alias.
Ouverture du fichier.
set monFichierExport to open for access file leNomDuFichier with write permission
Mettre le marqueur de fin de fichier à zéro ce qui "efface" le contenu, si le fichier existe déjà.
set eof of monFichierExport to 0
Ecriture du fichier.
write dataFichierFinal to monFichierExport
Fermeture du fichier.
close access monFichierExport
Ne pas oublier, en cas de difficulté logiciel, de mettre cette séquence dans un try... on error...end try.