2 votos

AppleScript: Cómo escribir en una línea específica de un archivo de texto?

Ejemplo de contenido de un .archivo txt en mi Mac:

This is sentence A.
This is sentence B.
This is sentence C.
This is sentence D.
This is sentence E.

Quiero implementar una subrutina, como este:

writeTextAtSpecificLine(("This is the newcomer sentence." & linefeed), 4)

así que, el archivo de texto por consiguiente, en este aspecto:

This is sentence A.
This is sentence B.
This is sentence C.
This is the newcomer sentence
This is sentence D.
This is sentence E.

Sé que puedo lograr mi resultado deseado haciendo de cada línea del archivo de texto de su propio elemento en un AppleScript list objeto, así:

set theIndividualLinesOfTextFileAsList to paragraphs of (read theFilepathOfTxtFile)

Entonces yo podría dividir el list, basado en el número de la línea y, a continuación, agregar todo de nuevo juntos.

Pero, ¿ un método más eficiente para existir?

Mi verdadero .archivo txt es mucho más largo que el contenido de la muestra anterior.

4voto

wch1zpink Puntos 11

No estoy seguro esta es la manera más eficiente, pero esto logra lo que buscas. Obras para mí en la última versión de Sierra

tell application "TextEdit" to make new paragraph at after third paragraph of text of document 1 with data "This is the newcomer sentence. \n"

3voto

unlocked2412 Puntos 81

Versión corregida:

set selected_file to ((path to documents folder as text) & "hom.txt") as alias
set text_data to "This is the newcomer sentence."

InsertLine(selected_file, text_data, 4)

on InsertLine(the_file, the_data, num_line)
    try
        set file_id to open for access the_file with write permission
        set text_data to read file_id

        -- CHECK EMPTY LINE
        if (paragraph num_line of text_data) ≠ "" then
            set the_offset to (offset of (paragraph num_line of text_data) in text_data) - 1
            set remaining_data to (the_data) & (text the_offset thru -1) of text_data
            set eof of file_id to the_offset
        else -- LINE IS EMPTY
            set num_line to num_line - 1
            set the_count to (count of (characters of (paragraph num_line of text_data))) - 1
            set the_offset to (offset of (paragraph num_line of text_data) in text_data) + the_count + 2
            set remaining_data to the_data & linefeed & ((text (the_offset + 1) thru -1) of text_data)
            set eof of file_id to the_offset - 1
        end if

        -- WRITE DATA TO FILE
        --write the_data to file_id -- INSERT LINE
        write remaining_data to file_id -- WRITE REMAINING DATA
        close access file_id
    on error
        try
            close access the_file
        end try
    end try
end InsertLine

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