Scris: 01 Feb 2010, 02:52
Weekend-ul acesta mi-am mai facut timp pentru Trucker, daca tot mi-a trecut durerea de masea si mai este si vacanta.
Am lucrat sambata cateva ore sa pigulesc pozitii pe ruta Londra - Bucuresti.
Sa o iau sistematic cu ceea ce am facut pana in prezent.
Am realizat in Excel un tabel cu 4 randuri si multe coloane. Fiecare coloana contine in cele patru celule urmatoarele informatii: pe primul rand localitatea sau numele drumului unde nu este localitate, pe al doilea rand este doar numele drumului, pe al treilea rand se afla kilometrul corespunzator, iar pe al patrulea si deocamdata ultimul rand se afla tara corespunzatoare pozitiei.
Am facut astfel pentru a fi sigur ca nu atribui gresit valori unei pozitii, de exemplu coloana Cluj-Napoca are pe cele trei randuri de sub numele orasului: "E60" - ruta europeana care trece pe aici, apoi "3005" care ar fi borna de kilometraj, practic atatia kilometri sunt din londra pe ruta constituita, iar pe ultimul rand este "Romania", tara in care ne aflam.
Dupa aceea am salvat fisierul in format CSV, adica un fel de text unde apare intre celule semnul ";" (punct si virgula). Cu functia Find and Replace din Notepad am inlocuit punct si virgula cu bara verticala, astfel ajungand sa am 4 stringuri din acelea cu mai multe segmente delimitate de bare verticale. Pe acestea le-am atribuit constantelor: pentru sRuta stringul cu numele localitatilor, pentru sRoad stringul cu numele drumurilor, pentru sKM stringul cu bornele de kilometraj si pentru sCountry stringul cu tarile.
E clar ca cele patru stringuri au un numar egal de segmente, de aceea am si inceput treaba in excel pentru a nu ma incurca. Teoretic a ramas tot un tabel.
Conteaza acum principiul de functionare al deplasarii printre segmente, ceasul l-am tratat mai sus.
Avem o variabila de tip integer pe care am denumit-o iLoc, iar aceasta este incrementata cu cate unu dupa metoda Let iLoc = iLoc + 1. Apoi, in functia string segment iLoc va fi al treilea parametru. Folosind de patru ori functia StringSegment, doar primul parametru variand, vom schimba pozitia pe toate cele patru randuri de tabel.
Pun mai jos doar scriptul de deplasare in forma lui actuala, una foarte rudimentara. Dupa cod mai sunt cateva explicatii edificatoare, fara ele nu prea se poate intelege functia definita.
Inceput cod:
Function TruckForward ()
Let iLoc = iLoc + 1
If iLoc > iTotalLocuri Then
Let iLoc = iTotalLocuri
EndIf
Let sLoc = StringSegment (sRuta, "|", iLoc)
Let sRoadA = StringSegment (sRoad, "|", iLoc)
Let sKMA = StringSegment (sKM, "|", iLoc)
Let sCountryA = StringSegment (sCountry, "|", iLoc)
EndFunction
Sfarsit cod
sLoc, sRoadA, sKMA si sCountryA sunt variabilele pentru pozitia actuala, lor li se atribuie valorile din segmentele lungi in urma aplicarii functiei StringSegment ().
Pentru a nu trece de Bucuresti undeva in vant, am mai facut o mica improvizatie, cu ocazia asta invatam si o functie noua.
Am introdus variabila iTotalLocuri, acesteia atribuindu-i-se o valoare egala cu numarul total de locatii. Exista in AutoStartEvent () functia aplicata:
Let iTotalLocuri = StringSegmentCount (sRuta, "|")
Aceasta functie numara cate segmente delimitate de bare verticale exista in stringul lung sRuta, adica, la origine, in primul rand de Excel. Nu am scris manual numarul total de locatii, pentru a fi posibila in viitor introducerea de noi locatii pe ruta, fara sa fie necesara renumararea segmentelor.
Apoi, cum variabila iLoc tot creste cu cate o unitate cand i se spune, in functia de deplasare a fost introdus un If care sa verifice de fiecare data daca iLoc nu ajunge sa fie mai mare decat iTotalLocuri, moment in care nu ar mai fi segmente in cele patru stringuri lungi. Cand se ajunge aici, in mod fortat iLoc este adus la valoarea iTotalLocuri, deci ramane tot timpul la capat, in Bucuresti pe Calea Victoriei, la kilometrul 3427. Printr-un procedeu asemanator nu inainteaza nici timpul in momentul in care nu exista deplasare.
In posturi viitoare as putea pune coduri mai multe, insotite de continutul constantelor si de mesajele inglobate. Sa vedem, poate cel mai simplu ar fi sa le punem in fisiere TXT care se deschid in pagina noua actionand un link de aici.
Oricum, deseara facem si la curs cate ceva despre formatare, astfel ajungand mai la zi, deci devenind inteligibil pentru mai multi modul de impartire a informatiilor pe fisiere diferite.
Sper ca zilele acestea sa fac si kit de instalare pentru a putea testa in mod practic lucrurile, deocamdata si sursa va fi vizibila, astfel incat oricine poate veni cu idei si in urma incercarilor direct pe cod.
Am lucrat sambata cateva ore sa pigulesc pozitii pe ruta Londra - Bucuresti.
Sa o iau sistematic cu ceea ce am facut pana in prezent.
Am realizat in Excel un tabel cu 4 randuri si multe coloane. Fiecare coloana contine in cele patru celule urmatoarele informatii: pe primul rand localitatea sau numele drumului unde nu este localitate, pe al doilea rand este doar numele drumului, pe al treilea rand se afla kilometrul corespunzator, iar pe al patrulea si deocamdata ultimul rand se afla tara corespunzatoare pozitiei.
Am facut astfel pentru a fi sigur ca nu atribui gresit valori unei pozitii, de exemplu coloana Cluj-Napoca are pe cele trei randuri de sub numele orasului: "E60" - ruta europeana care trece pe aici, apoi "3005" care ar fi borna de kilometraj, practic atatia kilometri sunt din londra pe ruta constituita, iar pe ultimul rand este "Romania", tara in care ne aflam.
Dupa aceea am salvat fisierul in format CSV, adica un fel de text unde apare intre celule semnul ";" (punct si virgula). Cu functia Find and Replace din Notepad am inlocuit punct si virgula cu bara verticala, astfel ajungand sa am 4 stringuri din acelea cu mai multe segmente delimitate de bare verticale. Pe acestea le-am atribuit constantelor: pentru sRuta stringul cu numele localitatilor, pentru sRoad stringul cu numele drumurilor, pentru sKM stringul cu bornele de kilometraj si pentru sCountry stringul cu tarile.
E clar ca cele patru stringuri au un numar egal de segmente, de aceea am si inceput treaba in excel pentru a nu ma incurca. Teoretic a ramas tot un tabel.
Conteaza acum principiul de functionare al deplasarii printre segmente, ceasul l-am tratat mai sus.
Avem o variabila de tip integer pe care am denumit-o iLoc, iar aceasta este incrementata cu cate unu dupa metoda Let iLoc = iLoc + 1. Apoi, in functia string segment iLoc va fi al treilea parametru. Folosind de patru ori functia StringSegment, doar primul parametru variand, vom schimba pozitia pe toate cele patru randuri de tabel.
Pun mai jos doar scriptul de deplasare in forma lui actuala, una foarte rudimentara. Dupa cod mai sunt cateva explicatii edificatoare, fara ele nu prea se poate intelege functia definita.
Inceput cod:
Function TruckForward ()
Let iLoc = iLoc + 1
If iLoc > iTotalLocuri Then
Let iLoc = iTotalLocuri
EndIf
Let sLoc = StringSegment (sRuta, "|", iLoc)
Let sRoadA = StringSegment (sRoad, "|", iLoc)
Let sKMA = StringSegment (sKM, "|", iLoc)
Let sCountryA = StringSegment (sCountry, "|", iLoc)
EndFunction
Sfarsit cod
sLoc, sRoadA, sKMA si sCountryA sunt variabilele pentru pozitia actuala, lor li se atribuie valorile din segmentele lungi in urma aplicarii functiei StringSegment ().
Pentru a nu trece de Bucuresti undeva in vant, am mai facut o mica improvizatie, cu ocazia asta invatam si o functie noua.
Am introdus variabila iTotalLocuri, acesteia atribuindu-i-se o valoare egala cu numarul total de locatii. Exista in AutoStartEvent () functia aplicata:
Let iTotalLocuri = StringSegmentCount (sRuta, "|")
Aceasta functie numara cate segmente delimitate de bare verticale exista in stringul lung sRuta, adica, la origine, in primul rand de Excel. Nu am scris manual numarul total de locatii, pentru a fi posibila in viitor introducerea de noi locatii pe ruta, fara sa fie necesara renumararea segmentelor.
Apoi, cum variabila iLoc tot creste cu cate o unitate cand i se spune, in functia de deplasare a fost introdus un If care sa verifice de fiecare data daca iLoc nu ajunge sa fie mai mare decat iTotalLocuri, moment in care nu ar mai fi segmente in cele patru stringuri lungi. Cand se ajunge aici, in mod fortat iLoc este adus la valoarea iTotalLocuri, deci ramane tot timpul la capat, in Bucuresti pe Calea Victoriei, la kilometrul 3427. Printr-un procedeu asemanator nu inainteaza nici timpul in momentul in care nu exista deplasare.
In posturi viitoare as putea pune coduri mai multe, insotite de continutul constantelor si de mesajele inglobate. Sa vedem, poate cel mai simplu ar fi sa le punem in fisiere TXT care se deschid in pagina noua actionand un link de aici.
Oricum, deseara facem si la curs cate ceva despre formatare, astfel ajungand mai la zi, deci devenind inteligibil pentru mai multi modul de impartire a informatiilor pe fisiere diferite.
Sper ca zilele acestea sa fac si kit de instalare pentru a putea testa in mod practic lucrurile, deocamdata si sursa va fi vizibila, astfel incat oricine poate veni cu idei si in urma incercarilor direct pe cod.