Bueno, creo que he reducido el 0D
error en relación con el uso de cat
en la do shell script
comando y han modificado el código para que no se introduzcan los retornos de carro, al menos hasta el momento en las pruebas sólo este código presentado a continuación. Tendría que hacer más pruebas para ver explícitamente en donde el error es, sin embargo, he recodificado para utilizar un do shell script
comando en una manera de escribir en el archivo, sin la introducción de retornos de carro.
Sin embargo, he comentado la primera reescritura de la Parte 4 que utiliza el do shell script
comando porque mientras no introducir retornos de carro que se le añade una línea en blanco al final del archivo de destino cada vez que se ejecuta y mientras no fatal, no obstante, no estoy seguro de que usted quiere que suceda. Por lo tanto, he añadido una manera alternativa de no usar un do shell script
comando.
Tenga en cuenta que yo prefiero usar camelCase convención de nomenclatura para mi las variables, por lo que he reescrito todo el código de la adición de código y comentarios , como yo prefiero ellos. Lo siento si esta inconvenientes que sin embargo, tenía que hacerlo de una manera que me permitió trabajar de manera efectiva a través de cualquier problema. Siéntase libre de modificar como necesitaba/quería.
El código siguiente en el archivo de destino si es o no inicialmente contiene Texto ASCII contenido y he verificado en mi sistema después de varios escribe que no hay retornos de carro introducido original y el archivo de destino se comprueban en primer lugar, ya sea vacío o no, no tenía ni retornos de carro y sin saltos de línea se convirtieron en cualquier momento respecto a otras versiones de código que ha causado 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