Avaleht
uus teema   vasta Tarkvara »  Programmeerimine »  Massiivi elementide vahetamine perlis märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale. Teata moderaatorile
otsing:  
LauriKaks
HV kasutaja

liitunud: 09.04.2003




sõnum 23.02.2009 13:47:37 Massiivi elementide vahetamine perlis vasta tsitaadiga

Müstika?
elementaarne jupp:

#!/usr/bin/perl

open(buf, $ARGV[0]) || die("faili $ARGV[0] ei ole!");
@a=<buf>;

print "@a \n";
@a[1,2]=@a[2,1];
print "@a \n";


avada käsureal antud teksti (tühikutega eraldatud sõnad), lugeda see elementide kaupa massiivi ja vahetada massiivis 2 elementi omavahel.
Aga miks need ei vahetu?? Mõlemad 'print "@a \n";' laused trükivad ühte ja sama. Otse elemente massiivi pannes vahetamine töötab.
Kommentaarid: 16 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 16
tagasi üles
vaata kasutaja infot saada privaatsõnum
Smith
HV veteran
Smith

liitunud: 25.08.2002



Autoriseeritud ID-kaardiga

sõnum 23.02.2009 14:13:23 vasta tsitaadiga

Miks sa üldse arvad, et = abil midagi vahetada saab?
_________________
Only the Central Computer knows the truth
Kommentaarid: 158 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 145
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
LauriKaks
HV kasutaja

liitunud: 09.04.2003




sõnum 23.02.2009 14:27:21 vasta tsitaadiga

Smith kirjutas:
Miks sa üldse arvad, et = abil midagi vahetada saab?


http://docstore.mik.ua/orelly/perl/learn/ch03_04.htm
seal on näide '@fred[0,1] = @fred[1,0]; # swap the first two elements'

Aga see polegi tähtis. Tuleb välja, et isegi kirjutades '$a[1]=4' ei muutu selles massiivis midagi.
Kas massiiv on loodud valesti? Kas on muu võimalus üherealisest tekstifailist elementide massiivi panemiseks?

EDIT: eks. Leidsin vea.
eelmises näites @a sisaldab elemente (rida1 rida2) jne. @an=split(" ", @a[0]) on lahendus.
Kommentaarid: 16 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 16
tagasi üles
vaata kasutaja infot saada privaatsõnum
Smith
HV veteran
Smith

liitunud: 25.08.2002



Autoriseeritud ID-kaardiga

sõnum 23.02.2009 14:38:41 vasta tsitaadiga

Vaat siis, tuleb välja, et perl ongi selline imelik. Aga viga jah selles et kogu jama oli a[0] sees.
_________________
Only the Central Computer knows the truth
Kommentaarid: 158 loe/lisa Kasutajad arvavad:  :: 0 :: 1 :: 145
tagasi üles
vaata kasutaja infot saada privaatsõnum mine selle kasutaja kodulehele
cannuman
HV vaatleja

liitunud: 05.06.2007




sõnum 23.05.2009 12:45:38 vasta tsitaadiga

Tervitus.

Probleem järgmine. Vaja kontrollida veebiaadressi korrektsust.

Tahan testida, kas "://www." esineb vaid ühe korra...

Proovisin kahte variant:

if($line=~/:\/\/www.{1}/)

i($line=~m#://www.{1}#)

Mõlemad tagastavad tagastavad true ka siis kui "://www." mitu korda esineb...Mis ma valesti teen?

Aitäh
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
priitr
HV kasutaja

liitunud: 17.06.2004




sõnum 23.05.2009 13:56:58 vasta tsitaadiga

cannuman kirjutas:
Tervitus.

Probleem järgmine. Vaja kontrollida veebiaadressi korrektsust.

Tahan testida, kas "://www." esineb vaid ühe korra...

Proovisin kahte variant:

if($line=~/:\/\/www.{1}/)

i($line=~m#://www.{1}#)

Mõlemad tagastavad tagastavad true ka siis kui "://www." mitu korda esineb...Mis ma valesti teen?

Aitäh


Sa küsid perlilt, kas leidub koht stringis, kus oleks ://www ja veel üks suvaline sümbol.
Pane sulud ümber otsitavale fraasile enne {..}. A kui sa tahad teada, mitu korda üldse otsitav fraas stringis esineb, siis midagi sellist:
echo "https://www.hinnavaatlus.ee" | perl -ne '$arv++ while /:\/\/www\./g; print $arv; '

_________________
Tšudes ne bõvajet.
Kommentaarid: 27 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 27
tagasi üles
vaata kasutaja infot saada privaatsõnum
andre85
HV vaatleja

liitunud: 10.09.2006




sõnum 23.05.2009 19:10:01 vasta tsitaadiga

cannuman kirjutas:
Tervitus.

Probleem järgmine. Vaja kontrollida veebiaadressi korrektsust.

Tahan testida, kas "://www." esineb vaid ühe korra...

Proovisin kahte variant:

if($line=~/:\/\/www.{1}/)

i($line=~m#://www.{1}#)

Mõlemad tagastavad tagastavad true ka siis kui "://www." mitu korda esineb...Mis ma valesti teen?

Aitäh


Proovi nii:

@matches = $line=~/:\/\/www\./) ;
if(@matches == 1) {
...
}

_________________
andres
Kommentaarid: 8 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 7
tagasi üles
vaata kasutaja infot saada privaatsõnum
cannuman
HV vaatleja

liitunud: 05.06.2007




sõnum 24.05.2009 14:10:43 vasta tsitaadiga

suured tänud
Kommentaarid: 3 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 3
tagasi üles
vaata kasutaja infot saada privaatsõnum
2ndalpha
HV kasutaja
2ndalpha

liitunud: 03.11.2004




sõnum 31.05.2009 11:25:05 vasta tsitaadiga

UT Perli kursus nii keeruline nüüd ka ei ole ju:D
Kommentaarid: 23 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 22
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  Programmeerimine »  Massiivi elementide vahetamine perlis
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.