1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

BBEdit Replace-Script

Dieses Thema im Forum "AppleScript" wurde erstellt von Cassian, 16.07.09.

  1. Cassian

    Cassian Cox Orange

    Dabei seit:
    25.02.07
    Beiträge:
    97
    Wieder einmal möchte ich ein Script schreiben, welches mir die Arbeit stark erleichtert.
    In der letzten Zeit bekomme ich Texttabellen, die kleine aber trotzdem "wichtige" Fehler enthalten.
    Wie zum Beispiel doppelte Leerzeichen zwischen Wörtern, "é" welche in "e" umgewandelt werden müssen und so weiter.
    Nun möchte ich ein Script schreiben, welches mir all die Arbeit abnimmt. Doch leider komm ich einfach nicht weiter.

    Als Hilfe hatte ich bisher: macscripter und applescript.extracts
    dabei sind Scirpts wie folgt herausgekommen, doch leider hat kein Script die erwünschte Wirkung.

    Wäre nett, wenn ihr mir auf die Sprünge helfen könntet.

    Code:
    tell application "BBEdit"
    	activate
    	make new text document
    	paste
    	replace "\\x20\\x20" using "\\x20"
    	options {search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
    end tell
    
    Code:
    tell application "BBEdit"
    	activate
    	make new document
    	paste
    	
    	replace "\\x20\\x20"
    	using "\\x20"
    	searching in text 1 of text document "untitled text 7"
    	options
    			{search mode:grep, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false} ¬
    							
    end tell
    
     
  2. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Hallo,

    Was ist das?
    Benötigst Du dafür eine Software zum Lesen?

    Ansonsten würde ich einfach mit "read" den Text einlesen, manipulieren und zurückschreiben.

    Viele Grüße
     
  3. Cassian

    Cassian Cox Orange

    Dabei seit:
    25.02.07
    Beiträge:
    97
    Eine Texttabelle ist nichts besonderes. Es ist eigentlich nur eine Spalte mit Text auf jeder Zeile. Ein kleines Beispiel (Siehe Anhang).
    Dieses ist ein Screenshot aus einem Excel-File. Diese Zeilen werden einfach kopiert und in BBEdit eingefügt.
    Und zwar mit dem Script:
    Code:
    tell application "BBEdit"
    make new document
    paste
    end tell
    
    Danach sollte der Text korrigiert werden. Also doppelte Leerzeichen durch ein Leerzeichen ersetzen, ein é oder è durch ein e, usw.

    Momentan geht das mit der Funktion Suchen&Ersetzen dies möchte ich aber mit einem Script lösen.
    Von Hand kopieren Scriptstarten und fertig. Doch so einfach ist es nicht.
    Hast du eine Idee?
     

    Anhänge:

  4. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Liegt die Quelle als reiner Text vor? z.B. txt oder ein "eigenes" Format?

    Kopiert? Woher?

    Ich würde dazu tendieren davor alles aufzubereiten.

    Viele Grüße
     
  5. Cassian

    Cassian Cox Orange

    Dabei seit:
    25.02.07
    Beiträge:
    97
    Also die Datei liegt jeweils als .xls vor.
    Wird von Hand geöffnte und die benötigte Spalte wird manuell kopiert und gelangt so in den Zwischenspeicher und ist bereit für den Script.
     
  6. LittlePixel

    LittlePixel Strauwalds neue Goldparmäne

    Dabei seit:
    09.07.08
    Beiträge:
    641
    Schade, da es mit reinem Text sonst sehr trivial wäre.

    Ich würde die Bereinigung im Excel vornehmen.

    Code:
    tell application "Microsoft Excel"
        
        repeat with i from 28 to 12000
            
            set tmp to Value of Cell x of Row y
    
            -- bereinige tmp
    
            set (Value of Cell y of Row x) to tmp as text
            
        end repeat
        
    end tell
    
    
    -- Suchen und Ersetzen
    on ersetzenFunktion(txt, suchenText, ersetzenText)
        
        -- suchen
        set AppleScript's text item delimiters to suchenText
        set txt to every text item of txt as list
        
        -- ersetzen
        set AppleScript's text item delimiters to ersetzenText
        
        return (txt as string)
        
    end ersetzenFunktion
    
    
    
    Die doppelten Leerzeichen entfernst Du einfach mit einer Schleife, die nach " " sucht bis nichts mehr da ist.

    Viele Grüße
     
  7. Cassian

    Cassian Cox Orange

    Dabei seit:
    25.02.07
    Beiträge:
    97
    Dein Script klingt nicht schlecht. Doch ich denke dieses Script würde den Zweck besser erfüllen, doch leider geht der Punkt mit replace nicht.
    Code:
    tell application "BBEdit"
    	activate
    	make new document
    	paste
    	set search_string to "\\x20\\x20"
    	set replacement to "\\x20"
    	
    	replace (search_string as string) using (replacement as string) options {search mode:grep, starting at top:true}
    end tell
    als Hilfe stand mir besonders dieses eine Script zur verfügung. Jedoch ersetzt dies ganze Linien und nicht einzelne Zeichen.

    Code:
    -------------------------------------
    (* this just makes a sample document. *)
    -------------------------------------
    
    set sample_text to "Walking all the day, near tall towers
    where falcons build their nests
    Siver winged they fly,
    they know the call of freedom in their breasts
    Saw Black Head against the sky
    with twisted rocks that run down to the sea..."
    
    tell application "BBEdit" (* or "TextWrangler" *)
       activate
       make document with properties {text:sample_text}
    end tell
    
    delay 3 (* just some time to view the original text *)
    
    -------------------------------------
    (* script proper starts here *)
    -------------------------------------
    
    tell application "BBEdit" (* or "TextWrangler" *)
       tell document 1
           
           -------------------------------------
           
           (* replace first line that contains a search string *)
           
           set search_string to "falcons"
           set line_replacement to "So... what happened to that great line about falcons building nests?"
           
           tell (first line whose contents contains search_string)
               if exists then set contents to line_replacement
           end tell
           
           -------------------------------------
           
           (* replace every line that contains a search string *)
           
           set search_string to "all"
           set line_replacement to "No lines containing \"" & search_string & "\" allowed!"
           
           repeat with l in (lines whose contents contains search_string)
               set l's contents to line_replacement
           end repeat
           
           -------------------------------------
           
           (* replace a numbered line *)
           
           set line_number to 5
           set line_replacement to "... And where did line " & line_number & " wander off to?"
           
           tell (first line whose startLine is line_number)
               if exists then set contents to line_replacement
           end tell
           
       end tell
    end tell
     
  8. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    24.02.07
    Beiträge:
    253
    versuchs mal so:
    Code:
    tell application "BBEdit"
    	activate
    	make new document
    	paste
    	set srch to "  "
    	set repl to " "
    	replace srch using repl searching in text 1 of text document 1 options {search mode:literal, starting at top:true, wrap around:false, backwards:false, case sensitive:false, match words:false, extend selection:false}
    end tell
    ist allerdings in TextWrangler (dem kleinen Bruder von BBEdit entstanden (der übrigens hervorragend Scripts aufzeichnet und auch sonst ziemlich mächtig ist).
     
    Cassian gefällt das.
  9. Cassian

    Cassian Cox Orange

    Dabei seit:
    25.02.07
    Beiträge:
    97
    Super. Das Skript funktioniert. An was hat es nun gelegen? Ich bin neu bei Applescript und kann mir die Fehler nicht selbst erklären.
     
  10. CloneOfMyself

    CloneOfMyself Weigelts Zinszahler (Rotfranch)

    Dabei seit:
    24.02.07
    Beiträge:
    253
    Die Grep-Suche mit \x20 funktioniert auch "zu Fuss" schon nicht. Aber warum so kompliziert, wenn man einfach ein Leerzeichen nehmen kann. ;)

    Ich habe das Script einfach in TextWrangler aufgezeichnet und modifiziert.
    Das ist eines der wenigen Programme, in dem die Record-Funktion wirklich ausgezeichnet funktioniert.
     

Diese Seite empfehlen