Ok, credo di aver ristretto il bug 0D
in relazione all'uso di cat
nel comando do shell script
e ho modificato il codice così non presenta ritorni a capo , almeno finora nel test solo questo codice presentato di seguito. Dovrei fare ulteriori test per vedere in modo esplicito dove il bug è comunque l'ho ricodificato per usare un do shell script
comando in un modo per scrivere sul file senza introdurre ritorni a capo .
Comunque ho commentato la prima riscrittura della Parte 4 che usa il do shell script
comando perché mentre non introduce ritorni a capo aggiunge una riga vuota al fine del file di destinazione ogni volta che viene eseguito e, sebbene non sia fatale, non sono sicuro che vorresti che succedesse. Quindi, ho aggiunto un modo alternativo per non utilizzare un do shell script
comando .
Nota che preferisco usare la convenzione di denominazione camelCase per le mie variabili, quindi ho riscritto tutto il codice aggiungendo ulteriori code e commenti come li preferisco. Scusa se questo inconveniente ti ha comunque dovuto farlo in un modo che mi permettesse di risolvere efficacemente qualsiasi problema. Sentiti libero di modificare come necessario / desiderato.
Il codice sotto funziona sul file di destinazione anche se inizialmente contiene contenuto di testo ASCII e ho verificato sul mio sistema dopo più scritture che non ci sono ritorni a capo introdotto e il file di destinazione originale è stato prima verificato, sia vuoto o no, non ha avuto ritorni a capo e nessun feed di riga è stato convertito in qualsiasi momento rispetto ad altre versioni di codice che ha causato questo problema.
-- # Part 1 - Get and format today's date.
set todaysDate to (current date)
set y to text -4 thru -1 of ("0000" & (year of todaysDate))
set m to text -2 thru -1 of ("00" & ((month of todaysDate) as integer))
set d to text -2 thru -1 of ("00" & (day of todaysDate))
set formattedTodaysDate to y & "_" & m & "_" & d & " -" as string
-- # Part 2 - Get the first line of the target file.
set targetFilePathname to (POSIX path of (path to desktop as string) & "My Fruit Log.txt")
-- # Initialize firstLineOfFile variable in case the targetFilePathname file is empty.
set firstLineOfFile to ""
try
-- # The commented line of code below is to be used when defining the actual code
-- # in order to ensure a line feed "\n" is used and not a carriage return "\r".
-- # Note that when compiled, the "\n" is converted to a literal newline
-- # and a commented code line will be shown for all similiar instances.
-- # set firstLineOfFile to first item of (read targetFilePathname using delimiter "\n")
set firstLineOfFile to first item of (read targetFilePathname using delimiter "\n")
end try
-- # Part 3 - Check to see if the first line of the target file is today's date.
set isTodaysDateAlreadyWritten to false
if firstLineOfFile is equal to formattedTodaysDate then
set isTodaysDateAlreadyWritten to true
end if
(*
-- # Part 4 - Write today's date to the first line of the target file, if necessary.
if isTodaysDateAlreadyWritten is equal to false then
-- # set theTextToWrite to formattedTodaysDate & "\n"
set theTextToWrite to formattedTodaysDate & "\n"
set theOriginalText to ""
try
set theOriginalText to (read targetFilePathname) as string
end try
-- # set theTextToWrite to theTextToWrite & "\n" & theOriginalText
set theTextToWrite to theTextToWrite & "\n" & theOriginalText
do shell script "echo " & quoted form of theTextToWrite & " > " & quoted form of targetFilePathname
end if
*)
-- # While the commented out Part 4 above does work by not introducing any carriage returns nonetheless
-- # it does introduce and additional empty line at the end of the target file and therefore will not be used.
-- #
-- # The following Part 4 does not use the do shell script command to make the writes nor does it add extra lines.
-- # Part 4 - Write today's date to the first line of the target file, if necessary.
if isTodaysDateAlreadyWritten is equal to false then
-- # set theTextToWrite to formattedTodaysDate & "\n"
set theTextToWrite to formattedTodaysDate & "\n"
set theOriginalText to ""
try
set theOriginalText to (read targetFilePathname) as string
end try
-- # set theTextToWrite to theTextToWrite & "\n" & theOriginalText
set theTextToWrite to theTextToWrite & "\n" & theOriginalText
try
set referenceNumber to open for access targetFilePathname with write permission
write theTextToWrite to referenceNumber starting at 0
close access referenceNumber
on error eStr number eNum
display dialog eStr & " number " & eNum buttons {"OK"} default button 1 with title "File I/O Error..." with icon caution
try
close access referenceNumber
end try
return
end try
end if