webForumDet fria alternativet

Stränghantering...

4 svar · 344 visningar · startad av Brian

BrianMedlem sedan sep. 2001502 inlägg
#1

Hej!

Två frågor:

Hur fungerar funktionen LENGTH i Perl?
Hars sökt en del på http://www.perldoc.com/perl5.6.1/pod/func/length.html men det sa mig inte så mycket tyvärr.

Om en sträng består av fler än 15 tecken, vill jag korta av strängen vid det 15:e tecknet och lägga till .... Om strängen är kortare än 15 tecken, så skall inget läggas till.

Hur ser stränghanteringen ut för denna funktion?

[Redigerat av Brian den 10 nov 2001]

HansenMedlem sedan aug. 2000374 inlägg
#2

Kika på denna tråd: http://cgi.webforum.nu/wf/Forum14/HTML/000451.html

------------------
Hansen
c.h@ngmedia.com

BrianMedlem sedan sep. 2001502 inlägg
#3

Den där smakade bra :)
Precis vad som behövdes.

Följde länken i svaret och läste lite om 'length' och 'substr'.

Förstår ändå inte hur jag skall göra?
Om jag exempelvis vill ta bort det första tecknet, och det två sista tecknen ur en sträng, hur skriver man då?

Man tar ju först reda på strängens längd. Sedan tar man bort första tecknet med hjälp av 'mid', och följer upp med att ta bort de två sista tecknen, även då med 'mid'.

Men jag förstår inte riktigt hur jag skall skriva/koda detta i perl?

Okm en sträng ser ut så här +OK 52 2364. Hur skriver man då exempelvis för att ta ut det som finns efter det andra mellanslaget? (I detta fall 2364)

Skulle vilja räkna ut vart andra mellanslkaget sitter med hjälp av 'instr'. Därefter ta hjälp av mid, som tar ut det som finns från andra mellanslagets placering, och till placeringen av sista tecknet, som man får fran med hjälpa av 'mid'.

Hur fungerar 'left', 'right', 'mid' och 'lengt' i perl?

//Brian

[Redigerat av Brian den 12 nov 2001]

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Om jag exempelvis vill ta bort det första tecknet, och det två sista tecknen ur en sträng, hur skriver man då?

Exempel:
$string="1234567890";
$string=substr($string,1,length($string)-3);
print $string;

Alltså, vi börjar läsa från position 1 (inte 0 som är först) och läser längden på strängen minus 3(vi tar bort 1 tecken i början och 2 i slutet=3 tecken)

Okm en sträng ser ut så här +OK 52 2364. Hur skriver man då exempelvis för att ta ut det som finns efter det andra mellanslaget? (I detta fall 2364)

Exempel:
$string="+OK 52 2364";
$string=substr($string,index($string," ",index($string," ")+1));
print $string;

Här anger vi en limit var vi vill börja läsa från, vilken vi räknar ut med index, alltså första förekomsten av " " + 1. Vi sätter alltså limiten till första tecknet efter " " där vi vill leta efter " ". Vilket gör den andra förekomsten av " ". Sedan har vi utelämnat length som är optional, och läser således till slutet av strängen.

Tillägg:
Detta kan man även lösa med s.k. regular expression, men nu var det ju substr() och index() vi tittade på.

------------------
/ J

[Redigerat av Jojoxx den 12 nov 2001]

BrianMedlem sedan sep. 2001502 inlägg
#5

Kanonbra! Nu tror jag mig kunna förstå lite mer av stränghanteringen i perl. Nu är det bara att sätta sig och 'prova' lite, så skall nog detta sitta.

Tycker att dina förklaringar och exempel var väldigt lättbegripliga och pedagogiska.

När jag sökte på substr i http://www.perldoc.com så fann jag detta exempel:

    my $name = 'fred';
    substr($name, 4) = 'dy';		# $name is now 'freddy'
    my $null = substr $name, 6, 2;	# returns '' (no warning)
    my $oops = substr $name, 7;		# returns undef, with warning
    substr($name, 7) = 'gap';		# fatal error

Problemet när man söker i perlhandbok eller i dokumentation, är att den ibland är så opedagogiskt upplagd.
Tycker att ditt exempel är bra mycket bättre och lättbegripligt än det som fanns i perldokumentationen.

Tack för din tid!

[Redigerat av Brian den 12 nov 2001]

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)