[Applescript] expected else but found on

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Hallo,

Ik ben een sjablonenscript aan het schrijven binnen applescript.
Ik loop nu tegen het probleem aan dat ik de melding krijg dat hij "else" verwacht maar "on" vindt.

Het probleem is dat ik weet dat on niet binnen een if/else blok gebruikt mag worden, maar dat is wel nodig om mijn script werkend te krijgen. Het if blok zegt namelijk of dat blok wel of niet moet worden uitgevoerd, en aangezien dit een erg groot script is waar dergelijke blokken veel ik voor komen weet ik zelf niet zo 123 een alternatief hiervoor.

Weet iemand hoe ik dit op een andere manier kan doen?

Wat er moet gebeuren (als hij volgens if mag worden uitgevoerd) dat hij in het actieve pages document een variabele zoals foutetekst gaat zoeken en vervangen door b.v. goedetekst. Volgens het onderstaande codeblok dacht ik dat dit moest, maar als iemand anders een alternatief weet is dit uiteraard welkom.

Als extra opmerking moet ik er wel bij zeggen dat de te vervangen waarde binnen het document max. 1 keer voor komt. Bovendien is het ook het enige document wat open is.

Dit is het blok code waar ik het over heb.


AppleScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
        # Organisatie
        if d_organisatie is "aan" then
            global editedText
            set voor to "apple"
            set na to "google"
            tell application "Pages"
                tell document 1
                    set BodyText to body text
                end tell
            end tell
            
            my findAndReplace2(voor, na, BodyText)
            
            tell application "Pages"
                tell document 1
                    set body text to editedText
                end tell
            end tell
            
            on findAndReplace2(toFind, toReplace, theText)
            set astid to AppleScript's text item delimiters
            set AppleScript's text item delimiters to toFind
            set textItems to theText's text items
            set AppleScript's text item delimiters to toReplace
            tell textItems to set editedText to beginning & toReplace & rest
            set AppleScript's text item delimiters to astid
            return editedText
            end findAndReplace2     
        end if

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

Verwijderd

Poeh, Applescript, da's lang geleden.

Hoezo moet het ON blok binnen de IF dan? Het declareren van de functie kan (moet zelfs?) gewoon buiten de IF. Je roept hem toch aan binnen de IF? (regel 12)

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Verwijderd schreef op donderdag 28 mei 2009 @ 10:09:
Poeh, Applescript, da's lang geleden.

Hoezo moet het ON blok binnen de IF dan? Het declareren van de functie kan (moet zelfs?) gewoon buiten de IF. Je roept hem toch aan binnen de IF? (regel 12)
Bedankt voor de reactie!

Hoe kan ik dat dan doen? En waar moet dat dan komen?

Het probleem is dat dit blok zich weer in een groter if/else blok zit, deze code wordt in dat geval uitgevoerd of hij nu wel of niet gebruikt wordt.

Is het niet mogelijk om een andere mogelijkheid te kiezen voor find and replace?
Of op de een of andere manier het "on" blok omzeilen?

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Ik heb ondertussen nog ermee geknutseld en ik krijg hem nu ge-compileerd.

Ik heb het blok helemaal naar voren geschoven in het script, maar nu krijg ik op het punt dat hij regel 16 gaat uitvoeren het probleem dat er volgens hem geen variabele editedText is, dit is de variabele die wordt aangemaakt met de blok code die naar boven is geschoven, in het voorbeeld is dit nog regel 27.

Moet ik dan nog iets speciaals toevoegen omdat dit nu apart staat?

___
Edit:
Inmiddels is het probleem opgelost, na
AppleScript:
1
global editedText
bovenaan te hebben gezet doet hij het wel goed.

[ Voor 13% gewijzigd door mac-er op 28-05-2009 14:01 . Reden: Is al gelukt ]

To Apple or not to Apple? That's the banana!


Acties:
  • 0 Henk 'm!

Verwijderd

Yep. Functies en globals declareren gebeurt altijd in de root, zeg maar. Dat is bij de meeste programmeertalen zo.

Of je de functie wel of niet aanroept bepaal je met de IF-constructie.

Acties:
  • 0 Henk 'm!

  • mac-er
  • Registratie: November 2006
  • Laatst online: 01-09 12:55
Hallo,

Ik heb inmiddels weer doorgewerkt met dit script maar loop nu tegen het volgende probleem aan.
Het probleem waar ik nu tegenaan loop is dat ik d.m.v. script de gehele tekst uit het document ga halen, hier een find/replace actie op uit voer en vervolgens weer terug plaats.

Dit doet hij allemaal goed, alleen is hij na het terugplaatsen alle stijlen die aanwezig zijn door elkaar aan het gooien, hiermee bedoel is zaken zoals lettertypes, tekenformaat, vetgedrukt, opsommingstekens e.d.

Weet iemand hoe ik dit opgelost kan krijgen?

Als ik dit namelijk heb, dan is een van de laatste problemen van het script direct opgelost.

Het script is zoals bovenstaand, m.u.z. van de locatie van de functie, die wordt aangeroepen en staat nu bovenin het script.

Karsten,

To Apple or not to Apple? That's the banana!

Pagina: 1