Text löschen

M

macwoif

Mitglied
Thread Starter
Dabei seit
11.12.2003
Beiträge
38
Reaktionspunkte
0
Guten Abend!

Ich habe ein ansich einfaches Problem, komme jedoch auf keine (funktionierende) Lösung:

* ich will eine Textdatei zeilenweise durchsuchen
* wenn ein bestimmtes Wort nicht vorkommt soll die Zeile gelöscht werden

Wie könnte ich das möglichst einfach lösen?

Danke,
macwoif
 
set eingabe to "'/pfad/eingabe.txt'"
set temp to "'/pfad/temp.txt'"
do shell script "more " & eingabe &" | grep -v bestimmtesWort > " & temp &";mv " & temp & " " & eingabe
-- grep -v, --invert-match
-- für "/pfad/"-Angabe, Datei in Skripteditor ziehen
 
Danke für deinen Tip - leider bekomm ich das nicht zum laufen:
fehlermeldung sh: -c line 1: unexpected EOF while looking for matching
und sh: -c: line 2: syntax error: unexpected eof

leider blick ich bei den terminal-befehlen nicht so ganz durch, kennt jemand eine lösung mit applescript direkt? hab da zwar schon ansätze, aber es löscht nicht wie gewünscht.

macwoif
 
Ciao macwolf,
ein Ansatz mit reinen AS-Mitteln ist der folgende:
display dialog "Zauberwort:" default answer ""
set theWord to text returned of the result

set myText to "Guten Abend!
Ich habe ein ansich einfaches Problem, komme jedoch auf keine (funktionierende) Lösung:
* ich will eine Textdatei zeilenweise durchsuchen
* wenn ein bestimmtes Wort nicht vorkommt soll die Zeile gelöscht werden
Wie könnte ich das möglichst einfach lösen?
Danke,
macwoif"

set newText to ""
set countP to count of paragraphs of myText
repeat with i from 1 to countP
*****set thisPar to paragraph i of myText
*****if theWord is in thisPar then
**********set newText to (newText & (thisPar) & return)
*****end if
end
repeat

display dialog newText
-------------------------
[This script was automatically tagged for color coded syntax by Convert Script to Markup Code

Statt den zu bearbeitenden Text zu "hardcoden" kannst Du ihn natürlich auch aus einem File in die Variabile "myText" einlesen.

Frohes scripten
Farid
 
Zuletzt bearbeitet von einem Moderator:
hallo!

genau das wäre auch mein ansatz gewesen! in der betreffenden .txt ändert sich jedoch bei einem durchlauf nichts.
Skript ist bei jetzt wie folgt:

set theWord to "Unknown application"
set nutzer to do shell script "whoami"
set pfad to ":Users:" & nutzer & ":Desktop:eek:riginaldatei.txt" as string
set myText to open for access file pfad with write permission
set newText to ""
set countP to count of paragraphs of myText
repeat with i from 1 to countP
set thisPar to paragraph i of myText
if theWord is in thisPar then
write newText & return to thisPar in myText
end if
end repeat

close access myText

gelöscht wird aber nicht !?!?!!?!
das problem ist ja eigentlich wirklich simpel - aber es funktioniert einfach nicht: "wenn zeile der datei bestimmtes wort enthällt->lösche die Zeile"

macwoif
 
macwoif schrieb:
hallo!
genau das wäre auch mein ansatz gewesen! in der betreffenden .txt ändert sich jedoch bei einem durchlauf nichts.
Skript ist bei jetzt wie folgt:
<schnipp>

gelöscht wird aber nicht !?!?!!?!

Ciao macwolf,
vielleicht liegt das Problem darin, dass Du sofort in den gleichen Textfile schreiben willst, aus dem der Originaltext stammt. Ich glaube es ist besser, den korrekten Text in die Variabile newText zu schreiben und erst am Ende den neuen Textfile zu erstellen.

Zweites Problem: read/write sind "Finder"-Kommandos - Du musst diese Scriptbefehle in einen Finder-"Tell"-block packen.

Drittes Problem: Du musst den Originalfile nicht nur oeffnen, sondern auch seinen Inhalt in myText einlesen:
Code:
set startFile to (open for access file pfad with write permission)
set myText to read startFile
...

Am Ende Deines repeat loops kannst Du dann den neuen Text in "startFile" (oder in einen ganz neuen File) schreiben:
Code:
write newText to startFile
close access startFile

Hab' jetzt leider keine Zeit, kann das ganze heute abend mal kontrollieren.

Frohes schaffen
Farid
 
Ciao macwolf,
vergiss, was ich über das Kommando read/write und den Finder geschrieben habe: war Stuss :p

So geht's jedenfalls ("origFile" und "newFile" mußt Du mit Deinen Pfaden updaten):
set theWord to "Mittelalter"
set origFile to alias "Macintosh HD:Users:farid:Documents:Gregorovius:rom01.htm"
set newFile to alias "Macintosh HD:Users:farid:Desktop:test.txt"

set myText to read origFile
set newText to ""
repeat with i from 1 to count of paragraphs of myText
*****set thisPar to paragraph i of myText
*****if theWord is in thisPar then
**********set newText to (newText & thisPar & return)
*****end if
end repeat

set newFile to (open for access newFile with write permission)
write newText to newFile
close access newFile

Frohes schaffen
Farid
 
Vielen Dank für deine Mühe Farid,

es funktioniert jetzt genau so wie gewünscht!

Milan / Maldini-Fan?

gruß und dank
macwoif
 
macwoif schrieb:
Milan / Maldini-Fan?
Wohnortbedingt seit 15 Jahren - mit meiner Jugendliebe aus Köln ist ja in der BL und international kein Staat mehr zu machen ;)

Saluti
Farid
 
Zurück
Oben Unten