Corso di Base Ciclo 2: Stringhe e Liste 0. Propedeutico: ========== 1 - Ricordatevi di avere attivo il gruppo "Second Life Italian Mentor" 2 - Quando rezzate i box fateli "share with group" e full permissions (copy/modify/transfer) 3 - Gli script dentro i box fateli "share with group" e full permissions (copy/modify/transfer) Questo serve perchè in caso di problemi io possa vedere ed eventualmente correggere i vostri script. [[L'esperienza della prima parte del corso evidenzia che occorre un sistema di controllo del genere]] Cliccate anche sulla scatola distributrice per avere questa notecard e tutto il materiale del corso. 1. Costruite un box con il seguente script "scheletro": ================================= default { state_entry() { llListen(10,"",llGetOwner(),""); } listen(integer channel, string name, key avkey, string str) { // Qui viene fatto l'esercizio string result=str; llOwnerSay(result); } } Questo vi consente di NON disturbare i vicini. Per parlare al vostro oggetto scrivete /10 qualcosa e l'oggetto scriverà SOLO a voi Object: qualcosa 2. Funzioni per la gestione delle stringhe. ========================= Le stringhe sono MOLTO importanti per i vostri script, quindi DOVETE conoscerle bene. In questo corso accanto ad ogni funzione di stringa viene anche indicato a cosa potrebbe essere utile. Gestione elementare delle stringhe: string x="Questa è una stringa"; string sGLOBAL="Stringa globale"; I global vanno scritti all'inizio del programma!!! ====> A cosa serve: ad impostare un valore costante. Usatissimo nei programmi. E' obbligatorio usare delle costanti per tutte le stringhe che potrebbero mutare. Quindi sì: string sOK="OK"; .... llSay(0,sOK); perchè così se invece di OK volete scrivere in un altro momento "JA" oppure "Corretto", lo potete fare 3. I caratteri e la lunghezza di una stringa ========================== Una stringa è composta da "caratteri". Per conoscere il numero di caratteri in una stringa: ------------------------------------------------------- integer llGetStringLength(string src) esempio llGetStringLength("ciao!") ritorna il NUMERO 5. Se dovete visualizzarlo in una llSay, aggiungete (string) in testa: llSay(10,"La lunghezza è "+(string)llGetStringLength(str)); Modificate lo scheletro in modo da visualizzare la lunghezza in caratteri di quello che scrivete ====> A cosa serve: è importante poter conoscere quanti caratteri ha una stringa. Vedi più oltre, ma intanto considerate lo script: integer i; for(i=0;i A cosa serve: Fondamentale per fare fare al vostro programma strade diverse a seconda di quello che ha introdotto l'avatar o situazioni particolari rappresentate da eventi o stringhe. 5. Concatenare due stringhe: ================== Usate + per "congiungere" due o più stringhe. NOTA: non è una addizione aritmetica e non esiste il "-" string str="pippo"; string a="str "+str; produce in a il valore "str pippo" Esempio: provate nello scheletro a mettere llOwnerSay("raddoppio la stringa: "+str+"-"+str); ===> A cosa serve: E' usatissima specie per visualizzare a video delle informazioni di debug. O comunque informative. O per creare stringhe più complesse. 6. Estrarre il primo carattere di una stringa: =========================== string char=llGetSubString(str,0,0); estrerre l'ultimo carattere di una stringa: string lastchar=llGetSubString(str,-1,-1); Notate che l'ordinamento dei caratteri va da 0: il primo carattere a -1: l'ultimo carattere. -2 rappresenta il penultimo carattere. ===> A cosa serve: Potete usarlo per verificare che il primo carattere valga un certo valore. (Per poterlo eliminare, oppure per verificare delle abbreviazioni senza controllare tutto il codice). 7. Modificare una stringa: Metterla in maiuscolo o minuscolo ------------------------------------------------- string upper=llToUpper("ciao"); restituisce "CIAO" string lower=llToLower("CiaO"); restituisce "ciao" ====> A cosa serve: per evitare di essere confusi dall'input del avatar se chiedete che risponda "fai" e lui scrive Fai il test non funzionerebbe 8. Cercare una sottostringa ================= integer llSubStringIndex("tanto va la gatta al lardo","gatta"); restituisce l'indice in cui compare "gatta" dentro la frase. 0=a partire dal primo carattere e così via. ====> A cosa serve Importantissima per cercare delle informazioni in una stringa per poterle cancellarle e/o manipolarle. 9. Modificare una stringa. Non si può modificare una stringa senza riassegnarla: ----------------------------------------------------------- string src=llDeleteSubString(src,0,0); cancella il primo carattere di una stringa se src era "Ciao!", dopo la nuova src diventa "iao!"; ====> A cosa serve: eliminare delle cose non volute nell'input: integer found=1; while(found==1) { integer found=llSubStringIndex(str,stringanonvoluta); if(found>=0) { str=llDeleteSubString(str,found,found+llGetStringLength(stringanonvoluta)); } } 10. Inserire in mezzo ad una stringa: ======================= string modified=llInsertString("new",1,"ciao"); produrrà la stringa "cnewiao" ===> A cosa serve: Per inserire informazioni extra dentro una stringa: integer found=llSubStringIndex(str,":"); if(found>=0) { str=llInsertString("56",found+1,"Il valore è: controlla"); } Str varrà: "Il valore è: 56 controlla"; 11. Rimuovere gli spazi da una stringa: ======================== string stringa_pulita=llStringTrim(str,STRIM_TRIM); toglie gli spazi in testa ed in fondo usate STRING_TRIM_HEAD per togliere solo gli spazi in testa usate STRING_TRIM_TAIL per togliere solo gli spazi in coda 12. Contenuti speciali dentro le stringhe: ========================== \t = 4 spazi \n = interrompi riga (vai a capo) utilissima per llSetText ed altri \" = per inserire dei doppi apici \\ = per inserire una barra rovescia string llEscapeURL(string) ritorna una stringa valida per HTTP, ma anche utile per VEDERE esattamente il contenuto della stringa. string llUnescapeURL(string) 13. Funzioni stringa evolute: ================== * string llBase64ToString(string) trasforma un contenuto "binario" in stringa * string llMD5String(string src,integer nonce) "firma" un documento (sicurezza) * string llStringToBase64(string str) trasforma una stringa in "binario" * string llXorBase64StringCorrect(string s1, strings2) applica una chiave ad una stringa (sicurezza). Prossima lezione sulle liste e sul modo di passare da stringhe a liste e viceversa. :)