procedure MaaritaPaate; //määritetään lähteen pääte eli esim. .txt tai .exe jne. begin url := trim(frmmain.TxtUrl.Text); //turhat välit pois if (url <> null) then begin //jos urli sisältää jotain niin ---> if (ansirightstr(url,7) = 'http://') then begin //löytyykö alusta http:// if(lastdelimiter('/',url) > 7) then begin //löytyykö /-merkkiä if(lastdelimiter('/',url) < lastdelimiter('.',url)) then begin //onko / ennen pistettä dotpos := lastdelimiter('.',url); //sijainti muistiin end else showmessage('You didn''t give the file''s url!');exit; //annetaan varoitus sekä käyttäjän korjata virheensä end else url := 'http://' + url; //lisätään http:// urlin alkuun frmmain.TxtUrl.Text := url; //laitetaan http:// tekstilootaan, ettein käyttäjä tekisi samaa virhettä uudestaan showmessage('Added http:// to url!'); //kerrotaan tapahtuneesta maaritapaate; //aloitetaan automaattisesti alusta, koska ohjelma korjasi virheen end else showmessage('Give url!');exit; //annetaan varoitus end; end;
Miksi tuo koodi näyttää aina Give url! viestin vaikka laittaisi mitä tuohon url-muuttujan sisälle
Muuta tuo ensimmäinen tarkistus muotoon:
if (url <> '') then begin
johhoh, nyt se näyttää vielä pahemmalta...
jos url on tyhjä niin ei tapahdu mitään
jos urlissa on http:// niin se lisää siihen toisen http://
jos siinä on peräkkäin 2x http:// niin tulee You didn''t give the file''s url!
jos siinä on http:// ja jotakin muuta paitsi toinen http:// niin tulee Give url!
kyllä on buginen, mut sehän on vasta mun eka ohjelma...
-----------------------------------------------------------------
edit:
muutin koodia pikkasen:
procedure MaaritaPaate; begin url := trim(frmmain.TxtUrl.Text); showmessage('Trimmaus'); if (url <> '') then begin showmessage('url <> tyhjä'); if (ansirightstr(url,7) = 'http://') then begin showmessage('alusta löytyi http://'); if(lastdelimiter('/',url) > 7) then begin showmessage('/ löytyi'); if(lastdelimiter('/',url) < lastdelimiter('.',url)) then begin showmessage('/ on ennen pistettä'); dotpos := lastdelimiter('.',url); end else showmessage('You didn''t give the file''s url!');exit; end else showmessage('Add http:// to url!');exit; end else showmessage('Give url!');exit; end; end;
nyt se sanoo tietyssä tapauksessa url <> tyhjä ja Give url!, miten delphiläinen suorittaa ensin if:stä ensimmäisen kohdan ja siirtyy sitten elseen?
edit2:
noni alan jo tajuta kun laitoin koko homman omiksi proceduureiksi, eli siinä kun ohjelma tarkistaa, että onko http://:tä alussa niin se tarkistaa sen väärältä puolelta...
Hoi Antti, tabit väleiksi koodipa-tagissa!
Kannattaa sisentää koodi loppuun asti eli laittaa viimeisetkin käskyt omille riveilleen. Varmaankin ymmärrät, että exit-komennot eivät tuossa sisälly else-blokkeihin, koska ympärillä ei ole begin-endiä?
Luulen, että helpommin toimisi sillä, että ensin tarkistaisi, onko alussa http:// (tai ftp://), ja lisäisi sellaisen tarvittaessa ja sitten kävisi //:n jälkeiset osat läpi silmukassa (jokaisen merkin) ja tarkistaisi siinä samalla rakenteen.
Heippa NanoSoft!
Tämä Null juttu tuntuu olevan enemmän, kuin joka toiselle hieman outo asia.
Null arvoa ei voi käyttää vertailuun, koska Null arvo voi olla ainoastaa joko TOSI tai EPÄTOSI.
Null ei voi siis olla < , > , = tai <>
Sitä sisältääkö muuttuja tai objekti Null arvon voidaan tutkia IsNull funktion avulla.
esim.
If Not IsNull(url) then begin
tai...
IF IsNull(url) = False then begin
Sitä sisältääkö muuttuja tai objekti tyhjän arvon voidaan tutkia IsEmpty funktion avulla.
Testaa funktioita ehtolauseilla: If Not IsNull(MyVar) then...ja If IsEmpty(MyVar) then...
Sain ohjelmani ohjelmani jo toimimaan ja, koska en osaa oikein vielä delphin ifiä käyttää kunnolla niin tein jokaisesta oman proceduurin...
edit: koodikin on jo ihan erillainen (exitit sun muut on poistettu)
Aihe on jo aika vanha, joten et voi enää vastata siihen.