Tengo un archivo .txt guardado en mi computadora. Quiero que Automator agregue un poco de texto en la parte superior del archivo .txt. No quiero que se sobrescriba ningún texto en el archivo .txt. También quiero que se cree una nueva línea para el nuevo texto.
El siguiente comando agrega el texto al archivo .txt, pero al final del archivo:
set TextToWrite to "This sentence should be the first line of the .txt file."
set TargetFilepath to "/Users/Me/Desktop/Documents/My File.txt"
do shell script "echo " & quoted form of TextToWrite & " >> " & quoted form of TargetFilepath
¿Se puede anteponer un archivo .txt en AppleScript? Gracias.
Descubrí un pequeño error pernicioso en todas las 4 respuestas actuales a esta pregunta.
Las líneas en blanco en un archivo .txt creado en una Mac deberían aparecer como 0A0A
en un editor hexadecimal. Pero, por alguna razón, las respuestas proporcionadas por Matteo, Christian Boyce y el usuario 3439894 convierten las líneas en blanco en 0D0D
. En la práctica, 0D0D
produce un resultado idéntico a 0A0A
(ambos se ven como una línea en blanco), pero Mac lo percibe 0D0D
como un retorno de carro mientras que Mac lo percibe 0A0A
como un salto de línea.
Aquí está la prueba que hice para descubrir este problema en las respuestas proporcionadas por Matteo y el usuario 3439894 (y si hace lo mismo, puede reproducir el problema):
Crear un nuevo documento en TextEdit. Haga clic en "Hacer texto sin formato" en el menú Formato. Guarde el archivo vacío como un archivo .txt.
Ejecute el código AppleScript proporcionado por Matteo, Christian Boyce o user3439894 usando este archivo .txt como TargetFilepath .
Abra el archivo .txt en TextEdit y agregue manualmente una línea en blanco al archivo usando su Enterclave.
Abra el archivo .txt en su editor hexadecimal y confirme que esta nueva línea en blanco es 0A0A
.
Vuelva a ejecutar el código AppleScript.
Abra el archivo .txt en su editor hexadecimal. Ahora notará que se 0A0A
ha convertido a 0D0D
.
Aquí está la prueba que hice para descubrir este problema en la respuesta proporcionada por Christian Boyce:
Crear un nuevo documento en TextEdit. Escribe "Esta es una oración". El archivo no puede estar vacío si desea ejecutar el código proporcionado por Christian Boyce sin error. Haga clic en "Hacer texto sin formato" en el menú Formato. Guarde el archivo como archivo .txt.
Ejecute el código AppleScript que proporcionó Christian Boyce. Cuando se le pida que elija un archivo, abra este archivo .txt.
Abra el archivo .txt en TextEdit y agregue manualmente una línea en blanco entre el nuevo "¿Qué pasa?" línea y la línea original "Esta es una oración" usando su Enterclave.
Abra el archivo .txt en su editor hexadecimal. Observe que esta nueva línea en blanco es 0A0D
. Debería ser, sin embargo, 0A0A
. Entonces, si bien la respuesta proporcionada por Christian Boyce no cambia todas las instancias de 0A0A
to 0D0D
(de la forma en que lo hacen las respuestas proporcionadas por Matteo y el usuario 3439894), sí usa 0D
en lugar de 0A
al poner "¿Qué tal?" en una nueva línea.
Me tomó mucho tiempo descubrir esta falla, ya que uno nunca podría decir que había un problema con estas soluciones de AppleScript a menos que uno abra el archivo .txt en un editor hexadecimal.
El problema con la respuesta proporcionada por Mateusz Szlosek es más grave; reemplaza todas las instancias de 0A0A
with , lo que garantiza que no20
haya líneas en blanco en ninguna parte del archivo .txt (lo que, a diferencia de las otras respuestas, significaba que podía identificar fácilmente que tenía un error sin abrir el archivo .txt en un editor hexadecimal) ).
Entonces, estoy reabriendo esta pregunta, ahora espero que alguien pueda proporcionar una forma de anteponer texto a un archivo .txt usando AppleScript, y sin convertir saltos de línea en retornos de carro en el proceso.
Si tiene curiosidad por qué necesito que se conserven los saltos de línea, es porque tengo un proceso posterior que escribe en la primera línea en blanco del archivo .txt, y este proceso no funciona correctamente si los saltos de línea se reemplazan con carro devoluciones.
Respuesta actualizada:
El código debajo de él lo usaría para reemplazar el código original ofrecido, ya que parece haber un error en AppleScript cuando se usa el do shell script
comando de la manera presentada originalmente que no está presente, el código , de manera representativa, se ejecuta en un bash
script en Terminal.
Tenga en cuenta que en cualquier momento open for access
se utiliza, debe codificarse para atrapar cualquier error e intentar cerrar el archivo, lo que intenta hacer. Dicho esto, no es necesariamente solo el manejo de errores que emplearía y todas las respuestas de codificación que presento se realizan como prueba de concepto y la responsabilidad de escribir el código que emplea un manejo de errores razonable es suya.
Tal como está codificado , esto creará el archivo de destino si no existe mientras se agrega el texto para agregarlo y, si existe, coloca el texto para agregar como la línea superior del archivo de destino .
set targetFilePathname to (POSIX path of (path to desktop as string) & "My Fruit Log.txt")
-- # set theTextToWrite to "This text will be written at the top of the file." & "\n"
set theTextToWrite to "This text will be written at the top of the file." & "\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
0D0D
problema. Haga lo siguiente: 1. Cree un archivo .txt de texto sin formato vacío en TextEdit. 2. Ejecute su script usando este archivo .txt como TargetFilepath . 3. Abra el archivo .txt en su editor hexadecimal. Notarás que los últimos cuatro caracteres hexadecimales son 0A0A
(hasta ahora todo bien). 4. Abra manualmente el archivo .txt en TextEdit. Cree una nueva línea en blanco debajo de la oración de muestra con la tecla Intro. 5. Ejecute su script por segunda vez. 6. Abra el archivo .txt en su editor hexadecimal. Ahora notará que se 0A0A
ha convertido a un archivo 0D0D
.0A0A
y las reemplaza todas con 0D0D
. Para ser claros, no es solo su código; los códigos que proporcionaron Matteo y @Christian Boyce se comportan de manera similar. El código proporcionado por Mateusz Szlosek es aún peor; al ejecutarse, reemplaza todas las instancias de 0A0A
con 20
.Podría hacerlo de esta manera, evitando los scripts de shell.
set the_file to choose file
set the_content to read of the_file
set the_new_stuff to "Wassup?" & return & the_content
set the_file_path to the_file as string
set open_for_writing to open for access file the_file_path with write permission
write the_new_stuff to open_for_writing starting at 0
close access open_for_writing
Básicamente lees el texto en el archivo .txt, pones "¿Qué pasa?" y un retorno delante del texto, y luego escribes sobre lo que hay en el archivo (porque comienzas en la posición 0).
Puede copiar el contenido actual del archivo en una variable, luego copiar TextToWrite
y TargetFilePath
luego agregar el contenido anterior nuevamente a TargetFilePath
.
set x to (do shell script "cat " & quoted form of TargetFilePath)
do shell script "echo " & quoted form of TextToWrite & " > " & quoted form of TargetFilePath
do shell script "echo " & quoted form of x & " >> " & quoted form of TargetFilePath
Aquí hay un ejemplo del AppleScript que puede usar:
set TargetFilepath to "$HOME/Desktop/file.txt"
set TextToWrite to quoted form of "NewText\n"
do shell script "echo " & TextToWrite & "$(cat " & TargetFilepath & ") > " & TargetFilepath
Utiliza la fórmula:echo "prepend\n $(cat input)" > input
set TextToWrite to "NewText"
a set TextToWrite to quoted form of "NewText\n"
y cuando compila se \n
convertirá en una nueva línea literal con la cita de cierre literalmente en la siguiente línea y \n
desaparecerá.Después de muchas pruebas y errores, creo que he encontrado una forma de anteponer texto a un archivo .txt sin que se introduzcan retornos de carro en el archivo .txt.
Mi solución se basa en la solución provista por @Christian Boyce, con solo un pequeño cambio: reemplazar return
con "\n"
.
Entonces, la solución completa sería:
set the_file to choose file
set the_content to read of the_file
set the_new_stuff to "Wassup?" & "\n" & the_content
set the_file_path to the_file as string
set open_for_writing to open for access file the_file_path with write permission
write the_new_stuff to open_for_writing starting at 0
close access open_for_writing
He hecho pruebas con este código y no lo he encontrado para insertarlo 0D
en el documento y tampoco cambia ninguna instancia de 0A
a 0D
.
open for access
debe codificarse para atrapar cualquier error e intentar cerrar el archivo. Así es como lo codifiqué en el enlace que le señalo la respuesta de otra de sus preguntas.
usuario3439894
bash
script y ejecutarlo solo en Terminal produce los resultados esperados y deseados de tener solo saltos de línea , no retornos de carro , ya sea que comience con un archivo de longitud cero o un archivo que ya tiene contenido de texto ASCII. La introducción de retornos de carro al usardo shell script
el comando de AppleScript con los mismosbash
comandos en este caso de uso debería considerarse un error , debido a que no está produciendo el comportamiento esperado. Continúa en el siguiente comentario...usuario3439894
esfera de rubik
do shell script
comando en ninguna parte. ¿ Puedes decirme si mi respuesta está bien para usar?usuario3439894