2 votos

¿Cómo puedo utilizar AppleScript para ver si una línea específica de una .txt archivo coincide con una variable?

Tengo un .txt archivo guardado en mi ordenador. El contenido de el .archivo txt se parece a este, por ejemplo:

CVTIt.png

Quiero que mi aplicación Automator para leer la primera línea de la .archivo txt y hacer que la línea en una nueva variable. Esto es por lo que puedo comprobar si esta variable coincide con otra variable.

Mi objetivo final es llegar a tener mi aplicación automáticamente escribe la fecha de hoy para la parte superior del archivo y agregar una línea en blanco debajo de la fecha de hoy. Pero solo quiero que esto ocurra si la fecha de hoy no ha sido escrito para archivo, por supuesto.

Este es el código que tengo hasta ahora:

# Part 1
# Get and format today's date.

set TodayDate to current date
set y to text -4 thru -1 of ("0000" & (year of TodayDate))
set m to text -2 thru -1 of ("00" & ((month of TodayDate) as integer))
set d to text -2 thru -1 of ("00" & (day of TodayDate))
set FormattedTodayDate to y & "_" & m & "_" & d & " -"


# Part 2
# Get the first line of the .txt file.

set Target_Filepath to quoted form of "/Users/Me/Desktop/Documents/My Fruit Log.txt"

set FirstLineOfTxtFile to <this is where I need your help, Ask Different>


# Part 3
# Check to see if the first line of the .txt file is today's date.

set TodayDateAlreadyWritten to false

if FirstLineOfTxtFile contains FormattedTodayDate then
    set TodayDateAlreadyWritten to true
end if


# Part 4
# Write today's date to the first line of the .txt file (if necessary).

if TodayDateAlreadyWritten = false then

    set TextToWrite to FormattedTodayDate & "
    "       
    set OriginalText to quoted form of (do shell script "cat " & Target_Filepath)
    set TextToWrite to quoted form of TextToWrite & "\n" & OriginalText
    do shell script "echo " & TextToWrite & " > " & Target_Filepath

end if

Es la Parte 2 donde estoy en necesidad de asistencia.

Que yo pueda haber cometido algunos errores en cualquiera de las partes del código anterior (pero ninguno a mi conocimiento), así que por favor siéntase libre de corregirme.

Estas son mis fuentes:

Parte 1: el Formato de las fechas cortas en AppleScript

Parte 4: Cómo anteponer archivo de texto en AppleScript?

2voto

user3439894 Puntos 5883

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X