Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Pascal: if:in toiminta

NanoSoft [21.04.2006 16:59:41]

#

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

zacura [21.04.2006 17:20:45]

#

Muuta tuo ensimmäinen tarkistus muotoon:

if (url <> '') then begin

NanoSoft [21.04.2006 17:40:29]

#

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...

Metabolix [21.04.2006 23:14:52]

#

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.

neau33 [22.04.2006 08:37:33]

#

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...

NanoSoft [22.04.2006 21:01:25]

#

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)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta