OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 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 More sharing options...
pyd Postad 13 november, 2008 Författare Share Postad 13 november, 2008 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 More sharing options...
OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 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 More sharing options...
OldMac Postad 13 november, 2008 Share Postad 13 november, 2008 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 More sharing options...
OldMac Postad 14 november, 2008 Share Postad 14 november, 2008 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 More sharing options...
OldMac Postad 14 november, 2008 Share Postad 14 november, 2008 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 Å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 More sharing options...
OldMac Postad 14 november, 2008 Share Postad 14 november, 2008 Å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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 "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 More sharing options...
OldMac Postad 14 november, 2008 Share Postad 14 november, 2008 "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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 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 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 More sharing options...
OldMac Postad 14 november, 2008 Share Postad 14 november, 2008 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 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 More sharing options...
pyd Postad 14 november, 2008 Författare Share Postad 14 november, 2008 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 More sharing options...
pyd Postad 16 november, 2008 Författare Share Postad 16 november, 2008 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 More sharing options...
OldMac Postad 16 november, 2008 Share Postad 16 november, 2008 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 More sharing options...
OldMac Postad 16 november, 2008 Share Postad 16 november, 2008 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 More sharing options...
Rekommendera Poster
Arkiverat
Det här ämnet är nu arkiverat och är stängt för ytterligare svar.