Ich habe eine .txt-Datei auf meinem Computer gespeichert. Ich möchte, dass Automator ganz oben in der .txt-Datei ein wenig Text hinzufügt . Ich möchte nicht, dass Text in der .txt-Datei überschrieben wird. Ich möchte auch, dass eine neue Zeile für den neuen Text erstellt wird.
Der folgende Befehl fügt den Text der .txt-Datei hinzu, jedoch am Ende der Datei:
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
Kann das Voranstellen einer .txt-Datei in AppleScript durchgeführt werden? Danke schön.
Ich habe einen schädlichen kleinen Fehler in allen aktuellen 4 Antworten auf diese Frage entdeckt.
0A0A
Leere Zeilen in einer .txt-Datei, die auf einem Mac erstellt wurde, sollten wie in einem Hex-Editor angezeigt werden . Aber aus irgendeinem Grund konvertieren die Antworten von Matteo, Christian Boyce und user3439894 leere Zeilen in 0D0D
. Erzeugt in der Praxis 0D0D
ein identisches Ergebnis 0A0A
– beide sehen aus wie eine Leerzeile –, aber Mac nimmt es 0D0D
als Wagenrücklauf wahr, während Mac es 0A0A
als Zeilenvorschub wahrnimmt.
Hier ist der Test, den ich durchgeführt habe, um dieses Problem in den Antworten von Matteo und user3439894 zu entdecken (und wenn Sie dasselbe tun, können Sie das Problem reproduzieren):
Erstellen Sie ein neues Dokument in TextEdit. Klicken Sie im Menü „Format“ auf „Nur-Text erstellen“. Speichern Sie die leere Datei als TXT-Datei.
Führen Sie den von Matteo, Christian Boyce oder user3439894 bereitgestellten AppleScript-Code mit dieser TXT-Datei als TargetFilepath aus .
Öffnen Sie die .txt-Datei in TextEdit und fügen Sie der Datei manuell eine Leerzeile hinzu, indem Sie Ihren EnterSchlüssel verwenden.
Öffnen Sie die .txt-Datei in Ihrem Hex-Editor und bestätigen Sie, dass diese neue leere Zeile 0A0A
.
Führen Sie den AppleScript-Code erneut aus.
Öffnen Sie die .txt-Datei in Ihrem Hex-Editor. Sie werden nun feststellen, dass die 0A0A
in konvertiert wurde 0D0D
.
Hier ist der Test, den ich durchgeführt habe, um dieses Problem in der Antwort von Christian Boyce zu entdecken:
Erstellen Sie ein neues Dokument in TextEdit. Geben Sie "Dies ist ein Satz." ein. Die Datei darf nicht leer sein, wenn Sie den von Christian Boyce bereitgestellten Code fehlerfrei ausführen möchten. Klicken Sie im Menü „Format“ auf „Nur-Text erstellen“. Speichern Sie die Datei als TXT-Datei.
Führen Sie den von Christian Boyce bereitgestellten AppleScript-Code aus. Wenn Sie aufgefordert werden, eine Datei auszuwählen, öffnen Sie diese .txt-Datei.
Öffnen Sie die .txt-Datei in TextEdit und fügen Sie manuell eine Leerzeile zwischen dem neuen "Wassup?" Zeile und die ursprüngliche Zeile "Dies ist ein Satz" mit Ihrem EnterSchlüssel.
Öffnen Sie die .txt-Datei in Ihrem Hex-Editor. Beachten Sie, dass diese neue leere Zeile 0A0D
. Es sollte aber sein 0A0A
. Während also die Antwort von Christian Boyce nicht alle Instanzen von 0A0A
zu ändert 0D0D
(so wie es die Antworten von Matteo und user3439894 tun), verwendet sie 0D
statt 0A
"Wassup?" auf einer neuen Zeile.
Ich habe lange gebraucht, um diesen Fehler zu entdecken, da man nie erkennen konnte, dass es ein Problem mit diesen AppleScript-Lösungen gab, es sei denn, man öffnet die .txt-Datei in einem Hex-Editor.
Das Problem mit der Antwort von Mateusz Szlosek ist schwerwiegender; Es ersetzt alle Vorkommen von 0A0A
durch , wodurch sichergestellt wird, dass nirgendwo20
in der TXT-Datei Leerzeilen vorhanden sind (was im Gegensatz zu den anderen Antworten bedeutete, dass ich leicht erkennen konnte, dass es einen Fehler gab, ohne die TXT-Datei in einem Hex-Editor zu öffnen ).
Also öffne ich diese Frage erneut und hoffe jetzt, dass jemand eine Möglichkeit bieten kann, einer TXT-Datei mit AppleScript Text voranzustellen, ohne dabei Zeilenvorschübe in Wagenrückläufe umzuwandeln.
Wenn Sie neugierig sind, warum die Zeilenvorschübe beibehalten werden müssen, liegt das daran, dass ich einen späteren Prozess habe, der in die erste leere Zeile der .txt-Datei schreibt, und dieser Prozess nicht richtig funktioniert, wenn die Zeilenvorschübe durch Wagen ersetzt werden kehrt zurück.
Aktualisierte Antwort:
Der Code darunter, den ich verwenden würde, um den angebotenen Originalcode zu ersetzen, da es einen Fehler in AppleScript zu geben scheint, wenn der do shell script
Befehl auf die ursprünglich dargestellte Weise verwendet wird, der nicht vorhanden ist, wurde der Code auf repräsentative Weise ausgeführt ein bash
Skript im Terminal.
Beachten Sie, dass "anytime" open for access
verwendet werden muss, um Fehler abzufangen und zu versuchen, die Datei zu schließen, was dies versucht. Das heißt, es ist nicht unbedingt nur die Fehlerbehandlung, die ich anwenden würde, und alle von mir präsentierten Codierungsantworten dienen als Proof of Concept , und die Pflicht, Code mit angemessener Fehlerbehandlung zu schreiben , liegt bei Ihnen.
Wie codiert erstellt dies die Zieldatei , wenn sie nicht existiert, während der hinzuzufügende Text hinzugefügt wird, und platziert den hinzuzufügenden Text, wenn er existiert, als oberste Zeile der Zieldatei .
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
Problems gefunden. Bitte gehen Sie wie folgt vor: 1. Erstellen Sie in TextEdit eine leere .txt-Datei im Nur-Text-Format. 2. Führen Sie Ihr Skript mit dieser .txt-Datei als TargetFilepath aus . 3. Öffnen Sie die .txt-Datei in Ihrem Hex-Editor. Sie werden feststellen, dass die letzten vier Hex-Zeichen 0A0A
(so weit, so gut) sind. 4. Öffnen Sie die .txt-Datei manuell in TextEdit. Erstellen Sie mit der Eingabetaste eine neue Leerzeile unter dem Beispielsatz. 5. Führen Sie Ihr Skript zum zweiten Mal aus. 6. Öffnen Sie die .txt-Datei in Ihrem Hex-Editor. Sie werden nun feststellen, dass die 0A0A
in eine umgewandelt wurde 0D0D
.0A0A
und ersetzt sie alle durch 0D0D
. Um es klar zu sagen, es ist nicht nur Ihr Code; Die von Matteo und @Christian Boyce bereitgestellten Codes verhalten sich ähnlich. Der Code von Mateusz Szlosek ist sogar noch schlimmer; Beim Ausführen ersetzt es alle Instanzen von 0A0A
durch 20
.Sie könnten es auf diese Weise tun und die Shell-Skripte vermeiden.
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
Im Grunde lesen Sie den Text in der .txt-Datei, Sie setzen "Wassup?" und ein Zeilenumbruch vor dem Text, und dann überschreiben Sie, was in der Datei steht (weil Sie bei Position 0 beginnen).
Sie könnten den aktuellen Inhalt der Datei in eine Variable kopieren, dann kopieren TextToWrite
und TargetFilePath
den vorherigen Inhalt wieder an anhängen 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
Hier ist ein Beispiel für das AppleScript, das Sie verwenden können:
set TargetFilepath to "$HOME/Desktop/file.txt"
set TextToWrite to quoted form of "NewText\n"
do shell script "echo " & TextToWrite & "$(cat " & TargetFilepath & ") > " & TargetFilepath
Es verwendet die Formel:echo "prepend\n $(cat input)" > input
set TextToWrite to "NewText"
to set TextToWrite to quoted form of "NewText\n"
und wenn es kompiliert wird, \n
wird das zu einer buchstäblichen neuen Zeile mit dem abschließenden Anführungszeichen buchstäblich in der nächsten Zeile und das \n
verschwindet.Nach vielen Versuchen und Irrtümern habe ich, glaube ich, eine Möglichkeit gefunden, einer .txt-Datei Text voranzustellen, ohne dass Wagenrückläufe in die .txt-Datei eingefügt werden.
Meine Lösung basiert auf der von @Christian Boyce bereitgestellten Lösung, mit nur einer kleinen Änderung: Ersetzen return
durch "\n"
.
Die vollständige Lösung wäre also:
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
Ich habe Tests mit diesem Code durchgeführt und ich habe ihn nicht zum Einfügen in das Dokument gefunden 0D
und er ändert auch keine Instanzen von 0A
zu 0D
.
open for access
muss es codiert werden, um Fehler abzufangen und zu versuchen, die Datei zu schließen. So habe ich es in dem Link codiert, mit dem ich Sie auf die Antwort auf eine andere Ihrer Fragen verweise.
Benutzer3439894
bash
Skript und das Ausführen in Terminal allein führt zu den erwarteten und gewünschten Ergebnissen, dass nur Zeilenvorschübe und keine Wagenrückläufe vorhanden sind , unabhängig davon, ob Sie mit einer Datei der Länge Null oder einer Datei beginnen, die dies bereits tut hat ASCII-Textinhalt. Die Einführung von Wagenrückläufen bei Verwendung des AppleScript-do shell script
Befehls mit denselbenbash
Befehlen in diesem Anwendungsfall müsste als Fehler angesehen werden , da er nicht das erwartete Verhalten erzeugt. Fortsetzung im nächsten Kommentar...Benutzer3439894
Rubiks Sphäre
do shell script
Befehl. Können Sie mir sagen, ob meine Antwort in Ordnung ist?Benutzer3439894