Gå till innehåll
Just nu i M3-nätverket

Applescript och Mail.


pyd

Rekommendera Poster

Aha :)

Nu funkar det mesta!!!

 

Lite frågetecken kvarstår dock :)

När jag infogar texten i det befintliga dokumentet, så sker följande:

Första gången jag kör det, så hamnar det "inklistrade" inte på en ny rad, utan direkt efter existerande text.

Nästa gång jag kör den så får det en egen rad, men lägger till en radbrytning ovan och under texten... hur blir man av med detta?

 

Dessutom så måste jag formatera om datumet.

finns det någon replace-funktion i samband med arrays?

Jag behöver alltså byta ut "nov" mot "11", "jan" mot "1" osv...

 

Det där med radbrytningen är jätteknepigt att säga någonting specifikt om - jag brukar prova mig fram till 'rätt radbrytning'. Medlen du har till ditt förfogande är dels "& return" på sluttampen av allStrings-variablen i string_routine - du kan ta bort detta eller införa fler mellanrum genom att t ex skriva "& return & return", osv. I posten #12 i denna tråd hade jag dessutom gjort en habrovinkel för TextWrangler i print_Out som bestod av hur jag delade upp citationstecknen över flera rader, vilket skapar mellanrum mellan textstyckena. Egentligen är det kanske inte så klokt att köra med båda - själv skulle jag nog börja med att skippa det där "& return" och experimentera med att sätta citationstecknen över olika antal rader. Om inte det funkar alls, skulle jag testa olika mängder av "& return".

 

Kan du posta hur datum-strängen ser ut för tillfället? Senast jag såg den postad här bestod den f ö av siffror - går inte den formateringen att få tag på igen?

Länk till kommentar
Dela på andra webbplatser

Det där med radbrytningen är jätteknepigt att säga någonting specifikt om - jag brukar prova mig fram till 'rätt radbrytning'. Medlen du har till ditt förfogande är dels "& return" på sluttampen av allStrings-variablen i string_routine - du kan ta bort detta eller införa fler mellanrum genom att t ex skriva "& return & return", osv. I posten #12 i denna tråd hade jag dessutom gjort en habrovinkel för TextWrangler i print_Out som bestod av hur jag delade upp citationstecknen över flera rader, vilket skapar mellanrum mellan textstyckena. Egentligen är det kanske inte så klokt att köra med båda - själv skulle jag nog börja med att skippa det där "& return" och experimentera med att sätta citationstecknen över olika antal rader. Om inte det funkar alls, skulle jag testa olika mängder av "& return".

Ok, ska prova mig fram lite där!

 

Kan du posta hur datum-strängen ser ut för tillfället? Senast jag såg den postad här bestod den f ö av siffror - går inte den formateringen att få tag på igen?

 

Datumet hämtas ifrån headern, och där är det skrivet så här:

13 nov 2008 23.00.07

 

För att mitt projekt ska fungera i slutänden så måste det få formatet åååå-mm-dd tt:hh.

Detta för att det ska gå att köra en dateDiff i ett asp-script.

Länk till kommentar
Dela på andra webbplatser

Huh, då, sådana där datum-konverteringar är rätt komplicerade historier. Det lär kräva en ytterligare och rätt omfattande subrutin.

 

Varför kan du inte föra in datumet genom 'content' som tidigare och få detta rätt formaterat på det viset?

Länk till kommentar
Dela på andra webbplatser

Allright, jag kanske överdrev - så svårt är det ju inte heller. Visst, en till subrutin krävs, men när allt kommer omkring är det ju bara en skala av förkortade månadsnamn att konvertera till tal samt att stuva om ordningen på talen - det går rätt lätt. Men först tycker jag ändå att det är bra om du undersöker om vägen över 'content' fungerar.

Länk till kommentar
Dela på andra webbplatser

Njae, content kommer ju bara att kunna innehålla när brevet skickades.

Vad jag behöver veta "på den här sidan" är när det kom in.

Därför måste jag använda mig av headern.

 

Allright, jag kanske överdrev - så svårt är det ju inte heller. Visst, en till subrutin krävs, men när allt kommer omkring är det ju bara en skala av förkortade månadsnamn att konvertera till tal samt att stuva om ordningen på talen - det går rätt lätt. Men först tycker jag ändå att det är bra om du undersöker om vägen över 'content' fungerar.
Länk till kommentar
Dela på andra webbplatser

Jag jobbar vidare i natten och skjuter lite från höften här :)

 

Först och främst så har jag hittat "replace_chars"-funktionen!

Den har jag gjort till en liten subrutin:

on fix_date()
set the theDate to theDate
set the theDate to replace_chars(theDate, "jan", "01") as string
set the theDate to replace_chars(theDate, "feb", "02") as string
set the theDate to replace_chars(theDate, "mar", "03") as string
set the theDate to replace_chars(theDate, "apr", "04") as string
set the theDate to replace_chars(theDate, "may", "05") as string
set the theDate to replace_chars(theDate, "jun", "06") as string
set the theDate to replace_chars(theDate, "jul", "07") as string
set the theDate to replace_chars(theDate, "aug", "08") as string
set the theDate to replace_chars(theDate, "sep", "09") as string
set the theDate to replace_chars(theDate, "okt", "10") as string
set the theDate to replace_chars(theDate, "nov", "11") as string
set the theDate to replace_chars(theDate, "dec", "12") as string
return allStrings
end fix_date

 

Sen har jag (försökt) anropa den vida scriptet:

 

on string_Routine(theHeader, theTicket) --För behandling av texten
tell application "Finder"
	activate
	set dateLine to paragraph 2 of theHeader as string
	set dateLineLength to length of dateLine as string
	set dateLineEnd to (length of dateLine) - 10 as integer
	set theDate to characters 11 thru 22 of dateLine as string
	set theMonth to characters 4 thru 6 of theDate as string
	set theTime to characters 23 thru dateLineEnd of dateLine as string
	set emailLine to paragraph 3 of theHeader as string
	set emailLineLength to length of emailLine as string
	set emailEnd to (length of emailLine) - 1 as integer
	set theEmail to characters 8 thru emailEnd of emailLine as string
	my fix_date(theMonth)
	set allStrings to theDate & theTime & ";" & theEmail & ";" & theTicket & return as string
	return allStrings
end tell
end string_Routine

 

Men jag får bara felet: "{"nov"} matchar inte parametrarna {} för fix_date.".

 

Jag antar att jag anropar den fel på något sätt, men vad?

 

Sen undrar jag om det är rätt att använda "return allStrings" i slutet, för att skicka tillbaka den omgjorda variabeln?

Länk till kommentar
Dela på andra webbplatser

Jag jobbar vidare i natten och skjuter lite från höften här :)

 

Först och främst så har jag hittat "replace_chars"-funktionen!

Den har jag gjort till en liten subrutin:

on fix_date()
set the theDate to theDate
set the theDate to replace_chars(theDate, "jan", "01") as string
set the theDate to replace_chars(theDate, "feb", "02") as string
set the theDate to replace_chars(theDate, "mar", "03") as string
set the theDate to replace_chars(theDate, "apr", "04") as string
set the theDate to replace_chars(theDate, "may", "05") as string
set the theDate to replace_chars(theDate, "jun", "06") as string
set the theDate to replace_chars(theDate, "jul", "07") as string
set the theDate to replace_chars(theDate, "aug", "08") as string
set the theDate to replace_chars(theDate, "sep", "09") as string
set the theDate to replace_chars(theDate, "okt", "10") as string
set the theDate to replace_chars(theDate, "nov", "11") as string
set the theDate to replace_chars(theDate, "dec", "12") as string
return allStrings
end fix_date

 

Sen har jag (försökt) anropa den vida scriptet:

 

on string_Routine(theHeader, theTicket) --För behandling av texten
tell application "Finder"
	activate
	set dateLine to paragraph 2 of theHeader as string
	set dateLineLength to length of dateLine as string
	set dateLineEnd to (length of dateLine) - 10 as integer
	set theDate to characters 11 thru 22 of dateLine as string
	set theMonth to characters 4 thru 6 of theDate as string
	set theTime to characters 23 thru dateLineEnd of dateLine as string
	set emailLine to paragraph 3 of theHeader as string
	set emailLineLength to length of emailLine as string
	set emailEnd to (length of emailLine) - 1 as integer
	set theEmail to characters 8 thru emailEnd of emailLine as string
	my fix_date(theMonth)
	set allStrings to theDate & theTime & ";" & theEmail & ";" & theTicket & return as string
	return allStrings
end tell
end string_Routine

 

Men jag får bara felet: "{"nov"} matchar inte parametrarna {} för fix_date.".

 

Jag antar att jag anropar den fel på något sätt, men vad?

 

Sen undrar jag om det är rätt att använda "return allStrings" i slutet, för att skicka tillbaka den omgjorda variabeln?

 

Jag anar att du har en bakgrund i ett annat programmerings-språk (eftersom du nämnde 'arrays' vid ett tillfälle, kanske Java-script? Och vilket jag inte kan ett dugg om). Tanken bakom sub-rutinen är säkert utmärkt men jag tvivlar på att det där konceptet kan fungera i AppleScript.

 

Början är bra med anrop av en egen subrutin för att fixa 'månadsproblemet'. Men sedan kommer felen och problemen i mängd: det saknas mottagarvariabel i deklarationen av subrutinen - AppleScript ger felmeddelande för varje rad med konceptet replace_chars (som sagt, främmande för AppleScript) - och returvärdet allStrings är inte förbundet med vad som händer i skriptet (allStrngs är inte ett kommando i AppleScript, det var ett variabel-namn som jag valde inom en av subrutinerna).

 

Den goda nyheten är att det här ser rätt lätt ut att lösa. Jag återkommer snart med ett förslag.

Länk till kommentar
Dela på andra webbplatser

Detta bör fungera:

 

on fixDate(theDate) -- tar emot månadsnamn i förkortn. (3 bokstäver)

 

tell application "Finder"

 

set i to 1 as integer

set rp to 12 as integer

 

set addZero to "0" as string

set checkList to "1 2 3 4 5 6 7 8 9" as string

set monthList to {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "okt", "nov", "dec"} as list

 

repeat with i from 1 to rp -- jämförande repetition. Vid överensstämmelse används det rullande repetitionsvärdet (i) för att översätta månad till siffra

 

set w to item i of monthList as string

 

if w = theDate then

 

set int1 to i as integer

set intString to int1 as string

 

end if

 

set i to i + 1

 

end repeat

 

if checkList contains intString then

 

set intString to addZero & intString as string -- tillägg av "0" till tal 1-9

 

end if

 

return intString

 

end tell

end fixDate

 

 

(* dessutom behöver du addera ett mottagande av resultatet under anropet av subrutinen fix_date - dvs någonting i stil med 'set convDate to the result as string' *)

 

-- Obs, tänkbar inkongruens: maj står med engelsk stavning medan förkortningen av oktober står med svensk stavning i din lista - jag har följt den men anar att endera är fel

Länk till kommentar
Dela på andra webbplatser

Åhhh!

Jag är såååå nära nu! :)

Jag tror att det enda som strular är att osx glömmer att textwrangler ska vara default app för att öppna textdokument.

 

Kan man, i document_Opener()-rutinen, specifiera vilket program det ska öppnas med?

Typ:

on document_Opener() --subrutin för öppnande av textfilen

tell application "Finder"

activate

open document file "log_recived.txt" of folder "Loopia" of folder "Documents" of folder "anders" of folder "Users" of startup disk with textwrangler-- definierar vilken textfil som ska användas

end tell

end document_Opener

 

För övrigt så har jag en bakgrund som hobbyutvecklar inom ASP framför allt, lite PHP, VB.NET samt C#. :)

Länk till kommentar
Dela på andra webbplatser

Åhhh!

Jag är såååå nära nu! :)

Jag tror att det enda som strular är att osx glömmer att textwrangler ska vara default app för att öppna textdokument.

 

Kan man sätta det på något sätt?

Alt. i document_Opener()-rutinen specifiera vilket program det ska öppnas med?

Typ:

 

Om jag förstår det rätt så ska texten från AppleScriptet föras in i ett och samma text-dokument som förvaras i en särskild mapp. Räcker det då inte med att text-dokumentet som ligger i mapen är av Text-Wrangler-typ? Även då "Finder" öppnar dokumentet startar TextWrangler samtidigt om inte programmet redan är öppet (det är egentligen TextWrangler som öppnar dokumentet som jag förstår det - Finder uppfattar jag är bara med och startar processen). Så jag förstår inte vad det är som blir fel? Vill du att TextWrangler även öppnar dokument skapade i andra text-editorer?

Länk till kommentar
Dela på andra webbplatser

Njae.

Det som händer är att "textredigeraren" öppnar dokumentet först.

Sen startas textwrangler.

TextWrangler blir ju tillsagt att använda sig av att använda sig av "front document" (select front document).

Detta felar ju eftersom dokumentet öppnas av "textredigeraren" och inte textwrangler genom finder.

 

Du skriver "Räcker det då inte med att text-dokumentet som ligger i mapen är av Text-Wrangler-typ?".

Vad innebär detta?

Om jag markerar filen, högerklickar och väljer att jag ska öppna det med textwrangler samt kryssar i att det alltid ska öppnas med denna app. Räcker inte det?

 

Det säkraste (som jag ser det i alla fall, med begränsad kunskap om både osx och applescript) vore om man kunde tvinga rutinen document_opener att öppna filen med textwrangler, men det kanske inte går?

 

 

 

Om jag förstår det rätt så ska texten från AppleScriptet föras in i ett och samma text-dokument som förvaras i en särskild mapp. Räcker det då inte med att text-dokumentet som ligger i mapen är av Text-Wrangler-typ? Även då "Finder" öppnar dokumentet startar TextWrangler samtidigt om inte programmet redan är öppet (det är egentligen TextWrangler som öppnar dokumentet som jag förstår det - Finder uppfattar jag är bara med och startar processen). Så jag förstår inte vad det är som blir fel? Vill du att TextWrangler även öppnar dokument skapade i andra text-editorer?
Länk till kommentar
Dela på andra webbplatser

"using" verkar kanske kunna vara rätt väg att gå här?

Men hur använder man det?

Jag har provat att sätta ..."using textwrangler".

Men då klagar den på att ingen variabel är satt till "textwrangler"...

Länk till kommentar
Dela på andra webbplatser

"TextWrangler blir ju tillsagt att använda sig av att använda sig av "front document" (select front document).

Detta felar ju eftersom dokumentet öppnas av "textredigeraren" och inte textwrangler genom finder."

 

1. Vad är det som felar? Kan du inte kopiera in texten i dokumentet med hjälp av skriptet efter att dokumentet öppnats genom "Finder"?

 

2. Mitt kodförslag utgår från att använda skriptbara text-editorer samt dokument skapade av dessa. Kan du inte använda ett generiskt TextWrangler-dokument (jag försöker begripa vad problemet är?)?

 

3. När väl ett TextWrangler dokument är öppnat ska det hur som helst gå utmärkt att adressera via "application TextWrangler" genom skriptet oberoende av hur det har öppnats. Om du ändå anser att det gagnar dina syften att öppna dokumentet genom TextWrangler kan du ändra applikations-namnet högst upp i subrutinen till 'tell application TextWrangler" samt skriva in en annorlunda formulerad sökväg. Typ: open "Macintosh HD: Folder 1: Fodlder 2: Logfilen.tx" [så lärde jag mig själv något nytt...]

Länk till kommentar
Dela på andra webbplatser

1. Vad är det som felar? Kan du inte kopiera in texten i dokumentet med hjälp av skriptet efter att dokumentet öppnats genom "Finder"?

Det som felar är att dokumentet öppnas i Textredigerare.app först.

Sen startar textwrangler.app, och där klistras den nya raden in.

Om jag högerklickar på filen, och väljer "öppna med" så står det att "Textredigerare.app" är förvalt program...

Jag misstänker att detta har med saken att göra.

 

2. Mitt kodförslag utgår från att använda skriptbara text-editorer samt dokument skapade av dessa. Kan du inte använda ett generiskt TextWrangler-dokument (jag försöker begripa vad problemet är?)?

Jag har provat att göra ett nytt dokument i TextWrangler, men det blir samma sak :(

 

 

3. När väl ett TextWrangler dokument är öppnat ska det hur som helst gå utmärkt att adressera via "application TextWrangler" genom skriptet oberoende av hur det har öppnats. Om du ändå anser att det gagnar dina syften att öppna dokumentet genom TextWrangler kan du ändra applikations-namnet högst upp i subrutinen till 'tell application TextWrangler" samt skriva in en annorlunda formulerad sökväg. Typ: open "Macintosh HD: Folder 1: Fodlder 2: Logfilen.tx" [så lärde jag mig själv något nytt...]

 

Dom 2 kodstycken som det berör är dessa:

Denna rutin öppnar "log_recived.txt", och det är här problemet uppstår.

Finder öppnar filen i textredigerare.app, inte textwrangler.

Det är här jag (tror jag) behöver specifiera att den ska öppnas med textwrangler.

on document_Opener() --subrutin för öppnande av textfilen
tell application "Finder"
	activate
	open document file "log_recived.txt" of folder "Loopia" of folder "Documents" of folder "anders" of folder "Users" of startup disk -- definierar vilken textfil som ska användas
end tell
end document_Opener

 

och sen:

Den här rutinen fungerar perfekt, om man bortser ifrån att filen redan är öppen i textredigeraren

on print_Out(txt) --sub för inkopiering av behandlad text, sparande samt stängande av log-fil.
tell application "TextWrangler"
	activate
	select front document
	select insertion point after last line of front document
	set selection to txt
	close document 1 saving yes
	quit
end tell
end print_Out

Länk till kommentar
Dela på andra webbplatser

Tjoohooo!

Vet inte riktigt vad jag gjorde, men jag fepplade med lite inställningar i "info" på filen i fråga, och sen funkade det :D

 

Nu ser hela koden ut så här, och jag är mycket nöjd!:

 

 set theServerAddress to "ftp.adress.nu" as string
set theUserName to "username" as string
set thePassword to "password" as string
set theDirectory to "path/to/file" as string
set theLogFile to "file_to_use.txt" as string
set theWorkDir to "path/to/local/file" as string
tell application "Transmit"
 set theDocument to make new document with properties {name:theServerAddress}
 tell theDocument
	 tell current session
		 connect to theServerAddress as user theUserName with password thePassword with initial path theDirectory
		 set your stuff to theWorkDir
		 download item theLogFile with resume mode replace --Laddar ner filen från ftp-servern
			 tell application "Mail"
			 set theSelection to selection
			 set theMessage to item 1 of theSelection
			 set the_Header to all headers of theMessage as string -- Hämtar in hela headern
			 set the_Ticket to content of theMessage as string -- Hämtar in allt i content
			 set theLogFile to "log_recived.txt" as string -- Definierar txt-filen som det ska sparas i.
			 my string_Routine(the_Header, the_Ticket) -- Kör rutinen för att formatera om texten
			 set textResult to the result as string -- hämtar in obehandlad text
			 my document_Opener() -- Subrutin för att öppna upp dokumentet
			 delay 2 -- ifall inte text-editorn redan är öppen
			 my print_Out(textResult) -- subrutin för inkopiering av texten
		 end tell
		 upload item theLogFile with resume mode replace -- Laddar upp filen igen.
		 quit -- Avslutar Transmit.
	 end tell
 end tell
end tell

on string_Routine(theHeader, theTicket) --För behandling av texten
 tell application "Finder"
	 activate
	 set dateLine to paragraph 2 of theHeader as string -- hela raden i headern som innehåller datumet
	 set dateLineLength to length of dateLine as string -- kollar hur lång hela strängen är
	 set dateLineEnd to (length of dateLine) - 10 as integer -- kortar av strängen så bara datumet är kvar
	 set theDate to characters 11 thru 22 of dateLine as string -- sparar ner hela datumet i en variabel
	 set theMonth to characters 4 thru 6 of theDate as string -- sparar ner månaden i en variabel
	 set theTime to characters 23 thru dateLineEnd of dateLine as string --sparar ner tiden i en variabel
	 set emailLine to paragraph 3 of theHeader as string -- hela raden i headern som innehåller mottagande e-postadress
	 set emailLineLength to length of emailLine as string -- kollar hur lång hela strängen är 
	 set emailEnd to (length of emailLine) - 1 as integer --kortar av strängen lite
	 set theEmail to characters 8 thru emailEnd of emailLine as string -- strippar av strängen så bara själva e-postadressen är kvar
	 set theYear to characters 8 thru 11 of theDate as string -- plockar ut året
	 set theDay to characters 1 thru 2 of theDate as string -- plockar ut dagen
	 my fixDate(theMonth) -- kör rutin för att konvertera om månaden ifrån ex. "nov" till "11" 
	 set convMonth to the result as string -- sparar ner resultatet av fixDate till variabel
	 set allStrings to theYear & "-" & convMonth & "-" & theDay & " " & theTime & ";" & theEmail & ";" & theTicket as string -- sparar ner allt till en variabel
	 return allStrings
 end tell
end string_Routine

on fixDate(theDate) -- tar emot månadsnamn i förkortn. (3 bokstäver)
 tell application "Finder"
	 set i to 1 as integer
	 set rp to 12 as integer
	 set addZero to "0" as string
	 set checkList to "1 2 3 4 5 6 7 8 9" as string
	 set monthList to {"jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec"} as list
	 repeat with i from 1 to rp -- jämförande repetition. Vid överensstämmelse används det rullande repetitionsvärdet (i) för att översätta månad till siffra
		 set w to item i of monthList as string
		 if w = theDate then
			 set int1 to i as integer
			 set intString to int1 as string
		 end if
		 set i to i + 1
	 end repeat
	 if checkList contains intString then
		 set intString to addZero & intString as string -- tillägg av "0" till tal 1-9
	 end if
	 return intString
 end tell
end fixDate

on document_Opener() --subrutin för öppnande av textfilen
 tell application "Finder"
	 activate
	 open document file "log_recived.txt" of folder "Loopia" of folder "Documents" of folder "anders" of folder "Users" of startup disk -- definierar vilken textfil som ska användas
 end tell
end document_Opener

on print_Out(txt) --sub för inkopiering av behandlad text, sparande samt stängande av log-fil.
 tell application "TextWrangler"
	 activate
	 select front document -- Väljer det dokument som är öppet
	 select insertion point after last line of front document -- Lägger till den nya informationen längst ner i dokumentet.
	 set selection to txt
	 close document 1 saving yes -- Stänger dokumentet och sparar det
	 quit -- Avslutar TextWrangler
 end tell
end print_Out

 

Det blev ett skapligt mycke större projekt än vad jag hade gissat på från början, men nu har jag åtminstånne en aning om vad applescript är :D

 

Tack som f*n, OldMac, för ditt tålamod!

Du får mer än gärna kommentera den "färdiga" koden, om du ser något som går att förenkla eller göra smidigare, annars anser jag mig färdig med mitt första applescript!

Länk till kommentar
Dela på andra webbplatser

Det blev ett skapligt mycke större projekt än vad jag hade gissat på från början, men nu har jag åtminstånne en aning om vad applescript är :D

 

Tack som f*n, OldMac, för ditt tålamod!

Du får mer än gärna kommentera den "färdiga" koden, om du ser något som går att förenkla eller göra smidigare, annars anser jag mig färdig med mitt första applescript!

 

Kommentar: imponerande jobb! Som första skript var det ju verkligen ingen dålig 'Hello World-variant'.

 

Det enda jag tycker ser aningen märkligt ut efter att ha skummat koden är raden "set your stuff to theWorkDir" (set your stuff...?) eftersom detta mer liknar vardags-engelska än hur jag föreställer mig AppleScript kod (set yourStuff to theWorkDir...?). Men hur som helst: kul att du fick ihop det!

 

Så får jag en ledig helg också... ;)

Länk till kommentar
Dela på andra webbplatser

Kommentar: imponerande jobb! Som första skript var det ju verkligen ingen dålig 'Hello World-variant'.

 

Hee, njae... Jag fick lite mer än vad jag bad om... :)

 

Det enda jag tycker ser aningen märkligt ut efter att ha skummat koden är raden "set your stuff to theWorkDir" (set your stuff...?) eftersom detta mer liknar vardags-engelska än hur jag föreställer mig AppleScript kod (set yourStuff to theWorkDir...?). Men hur som helst: kul att du fick ihop det!

 

I "Transmit" (Ftp-app) heter "mina filer "Your stuff" och server-sidan heter "Their stuff"...

 

Så får jag en ledig helg också... ;)

Det har du gjort dig förtjänt av!

Själv ska jag finlira med asp-sidorna som ska hantera informationen av log-filerna :)

Länk till kommentar
Dela på andra webbplatser

Om någon som läser här råkar vara intresserad så insåg jag att jag var tvungen att fixa en sak till.

För att undvika krockar om 2 mail kommer in precis samtidigt (vilket dom borde göra...) så fick jag lägga till en lite wait-rutin för det:

 

on delay_routine()
tell application "Mail"
	set theSelection2 to selection
	set theMessage2 to item 1 of theSelection2
	set the_Header2 to all headers of theMessage2 as string -- Hämtar in hela headern
	set emailLine2 to paragraph 3 of the_Header2 as string -- hela raden i headern som innehåller mottagande e-postadress
	set emailLineLength2 to length of emailLine2 as string -- kollar hur lång hela strängen är 
	set emailEnd2 to (length of emailLine2) - 1 as integer --kortar av strängen lite
	set theEmail2 to characters 8 thru emailEnd2 of emailLine2 as string -- strippar av strängen så bara själva e-postadressen är kvar
	if theEmail2 = "konto@domän.nu" then
		delay 60
	end if
end tell
end delay_routine

 

Vilket väckte en ny fråga hos mig.

Är det dumt att deklarera samma variablar flera gånger?

Ovanstående kod är en exakt kopia av den rutinen som jag använder senare i scriptet.

Här har jag dock döpt om dom med en avslutande 2:a för att undvika eventuella problem.

Men hur fungerar applescript i det här fallet?

Om jag skriver "set min_var to "en variabel", och senare i koden skriver "set min_var to "en annan variabel"... kommer detta att generera något problem?

Länk till kommentar
Dela på andra webbplatser

Tänkte väl att det skulle vara något (min lediga helg, osv...hah!). <_<

 

"Ovanstående kod är en exakt kopia av den rutinen som jag använder senare i scriptet.Här har jag dock döpt om dom med en avslutande 2:a för att undvika eventuella problem. Men hur fungerar applescript i det här fallet?"

 

Det går utmärkt. Jag förstår exemplet som att återanvändning sker inom ramen för en subrutin; då finns inga problem i att återanvända variabelnamn som förekommer utanför subrutinen så länge det inte är fråga om speciella, s k globala variabler (sådana som har obegränsad räckvidd över hela skriptet). Men eftersom du har lagt till en tvåa efter namnen tror jag f ö inte att variablerna kan räknas som återanvända, inte ens om de stod i huvudrutinen (variablerna har ju unika namn).

 

"Om jag skriver "set min_var to "en variabel", och senare i koden skriver "set min_var to "en annan variabel"... kommer detta att generera något problem?"

 

Om det sker inom en och samma subrutin, eller inom olika huvudrutiner (som jag uppfattar det har vanliga variabler räckvidd mellan olika huvudrutiner) så kommer frågan om problem eller ej helt enkelt an på hurvida man planerar rätt vid återanvändning. Även sådan, bokstavlig återanvändning av variabler, är OK enligt AppleScripts syntax.

Länk till kommentar
Dela på andra webbplatser

Just det, ja...något att upplysa alla nya AppleScriptare om: det finns 4 olika sätt att spara skripten på.

 

AppleScript har ett förflutet innan Apple's skifte till Intel-processorer vilket fortfarande märks i hur 3 av 4 sparsätt av skripten leder till PPC-filter som systemet tvingas köra med 'Rosetta'. Särskilt om man har skript med lång körtid är detta värt att undvika. Från manusläget kan man spara skriptet som "Programpaket" och om man även kryssar av alternativet "Startskärm" får man dels Intel-anpassning och ett skript som körs direkt efter dubbel-klick på skript-filen.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.



×
×
  • Skapa nytt...