Bien, creo que he reducido el error 0D
en relación con el uso de cat
en el comando do shell script
y he modificado el código para no introduce retornos de carro , al menos hasta ahora, solo este código se presenta a continuación. Tendría que hacer más pruebas para ver explícitamente dónde está el error. Sin embargo, lo he recodificado para utilizar un comando do shell script
de manera que escriba en el archivo sin introducir retornos de carro .
Sin embargo, he comentado la primera reescritura de la Parte 4 que usa el comando do shell script
porque, al no introducir retornos de carro , agrega una línea vacía al final del archivo de destino cada vez que se ejecuta y aunque no es fatal, no estoy seguro de que quiera que suceda. Por lo tanto, he agregado una forma alternativa de no usar un comando do shell script
.
Tenga en cuenta que prefiero usar la convención de nomenclatura camelCase para mis variables, por lo que he reescrito todo el código agregando código y comentarios como yo los prefiero. Disculpe si esto le incomodó, sin embargo, tenía que hacerlo de una manera que me permitiera resolver eficazmente cualquier problema. Siéntase libre de modificar según sea necesario / deseado.
El código a continuación funciona en el archivo de destino, ya sea que inicialmente contenga o no contenido de texto ASCII y lo he verificado en mi sistema después de varias escrituras, no hay retornos de carro introducido y el archivo de destino original se verificó por primera vez, ya sea vacío o no, no tenía retornos de carro y no se convirtieron líneas de alimentación en ningún momento en comparación con otras versiones de código que causó este 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