Ho una variabile di testo di classe text
che mostra qualcosa del genere quando viene restituito:
"
This is sentence 1.
This is sentence 2.
This is sentence 3.
This is sentence 4."
Voglio essere in grado di eliminare righe specifiche dal testo, senza influire sul resto della variabile.
Ad esempio: delete {1, 3}
per ottenere questo risultato:
"This is sentence 1.
This is sentence 3.
This is sentence 4."
Il metodo descritto in questa risposta ha un bug grave:
"Come eliminare una riga specifica di un paragrafo in AppleScript?"
Il metodo collegato per eliminare le righe in un paragrafo in realtà converte tutti gli avanzamenti di riga nella variabile di testo in ritorni. In altre parole, è impossibile eseguire questo codice più di una volta sulla stessa variabile.
Ad esempio, il seguente codice:
set varText to "
This is sentence 1.
This is sentence 2.
This is sentence 3.
This is sentence 4."
set varText to do shell script "sed -e '1d;3d' <<< " & quoted form of varText
-- Employing the same method on the same variable:
set varText to do shell script "sed -e '1d;3d' <<< " & quoted form of varText
return varText
ritorna
""
Poiché questo metodo funziona correttamente solo se le righe della variabile di testo sono il prodotto di una linefeed
(come dovrebbe), il problema non è che questo metodo non riesce a percepire return
una nuova riga (come avevo inizialmente sostenuto in questa domanda). Il problema è che questo codice introduce return
innanzitutto una variabile di testo.
Quindi, voglio una soluzione che mi permetta di eseguire la stessa variabile di testo attraverso la soluzione più di una volta nello stesso AppleScript.
In altre parole, sto cercando un metodo per rimuovere una riga specifica da un paragrafo che non ha questo bug e non inserisce un return
punto nel testo.
return
, sono ovviamente d'accordo! In realtà, non uso e non ho mai usato return
per concatenare stringhe multilinea! Ecco perché ho dovuto modificare in modo significativo il titolo e il corpo di questa domanda; il mio post conteneva diverse dichiarazioni inesatte. Questo post è stato pubblicato per la prima volta prima che mi accorgessi del bug nel tuo codice, che (alla fine ho capito) spiegava da dove returns
provenivano tutte le variabili del mio testo! Inizialmente avevo supposto di essere stato - in qualche modo - responsabile della prevalenza dei return
personaggi, cosa che ora non so.
do shell script
comando sta elaborando ciò che viene restituito dalla riga di comando , è AppleScript che non elabora correttamente l'output dei comandi eseguiti all'interno del do shell script
comando ! L'utilizzo di return
una concatenazione di stringhe a più linee era un problema perché sed
ha visto il contenuto della variabile come una riga e cancellato perché è in attesa di x0A
non x0D
allinearsi finali. Comunque la mia risposta aggiornata gestisce sia il cattivo utilizzo di return
over linefeed
che il bug.
do shell script "sed ..."
comando quando eseguito nel TerminalevarText
restituisce con\n
(x0A) non\r
(x0D) come dovrebbe. Anche ildo shell script "sed ..."
comando compilato in Script Editor ha ancora\n
(x0A) non\r
(x0D) tuttavia il motivo per cui viene restituito con\r
(x0D) l'intenzione del previsto\n
(x0A) è un mistero per me al momento. Lo considererò un bug di AppleScript poiché non rispecchia il comportamento previsto dello stesso quando eseguito in Terminal. Questo è il motivo per cui ho eliminato la mia risposta perché non ero a conoscenza del problema.