» »

Perl vprašanje.

Perl vprašanje.

ABX ::

Trenutno izdelujem scripto v perlu pa bi rabil pomoč.
Scripta zgleda nekako takole.

system(cls); (obstaja kak perl ukaz za pobrista sliko?)
print 1.Menu1;
print 2.Menu2;
..
$x=getnumber;
if ($x==1)...
elseif ($x==2)...
.
.
else
(tu pa ne vem katero funkcijo uporabit da bi se zadeva vrnila na začetek, v winsih je goto, tu pa ga ne znam uporabit)

Hvala!
P.S: Z perlom se ukvarjam 2 dni :)
Vaša inštalacija je uspešno spodletela!

OwcA ::

goto stavki, so stvar, ki se ji je načeloma dobro izogibati. Napisal si rahlo premalo kode, da bi lahko podal točen odgovor, zdi pa se mi, da bi lahko svoj problem rešil kar z zanko ali pa razdelitvijo kode v funkcije (in po potrebi uporabo rekurzije, ki ravno tako ni ravno najlepša rešitev, je pa zato preprosta :D ).

ABX ::

V bistvu moj menu na ekranu zgleda takole

1.Menu1
2.Manu2
3.Kr neki
:_ (tu kurzor čaka na tvoj odgovor)


Jaz pa bi rad da če kdo vnese nekaj kar ni 1,2,3 mu naloži na novo menu, ne pa da vrže ven iz programa. Pač bi dal eno zanko katera bi skočila spet na začetek skripte.

v Winsih je nekako takole

:Start
bla
bla
bla
GOTO Start
Vaša inštalacija je uspešno spodletela!

OwcA ::

Potem uporabi neskončno zanko:

while(1)
{
$x=getnumber;
if ($x==1)...
elseif ($x==2)...
elseif ($x==0) break;
}

Ne pozabi pa na pogoj, ki jo bo prekinil (break)! V zgoraj navedenm primeru je to x=0.

ABX ::

Ok to mi nekako dela, thx. Čeprav imam probleme z break oz. mi ne prekine, ker break ni pravilen perl ukaz.

Bi te prosil pa če mi podaš še sintakso za GOTO, ker nekako sem si že zamislil scripto z tem ukazom. (V bistvu jo prevajam iz NT scripte).
Vaša inštalacija je uspešno spodletela!

Zgodovina sprememb…

  • spremenilo: ABX ()

rasta ::

Za izhod iz zanke preveriš, če je vnos pravilen.
do
{
...
$x=getnumber;
} while ($x == 1 || $x==2 || $x==3);
if ($x==1)...
elseif ($x==2)...
elseif ($x==0) break;

OwcA ::

ABX: perl ni ravno moj jezik, namesto break uporabi last;
goto deluje podobno kot povsod drugod:

LABEL:
.
.
.
goto LABEL;

Še enkrat pa ti odsvetujem uporabo le-tega, ker to nasplošno velja za slabo programiranje.

rasta: tvoja koda ne naredi istega kot moja (oziroma zaželjenega). Pravzaprav ne naredi ničesar (pametnega). Enostavno ponavlja pobiranje vhoda dokler je ta veljaven (in ga zavrže), nato pa s prvim neveljavnim poskuša nekaj narediti.
Pogoj za while bi moral biti $x != 1 && $x!=2 && $x!=3 pa tudi tako bi trpela uporabnost, saj bi se še vedno moral nekako vrniti na začetek po vsaki izvedeni operaciji.

ABX ::

Thx, dela.

Vsem sem že probal razen "LABEL:" :)
Vaša inštalacija je uspešno spodletela!

perci ::

ABX: brezveze pisat skripte, pejt raj na pir

rasta ::

rasta: tvoja koda ne naredi istega kot moja (oziroma zaželjenega). Pravzaprav ne naredi ničesar
(pametnega). Enostavno ponavlja pobiranje vhoda dokler je ta veljaven (in ga zavrže), nato pa s prvim
neveljavnim poskuša nekaj narediti.
Pogoj za while bi moral biti $x != 1 && $x!=2 && $x!=3 pa tudi tako bi
trpela uporabnost, saj bi se še vedno moral nekako vrniti na začetek po vsaki izvedeni operaciji.

Hotel, sem samo pokazati, da se da narediti tudi brez skokov, ki se jih je pametno izogibati (vključno z
break). Če se želiš po izvedenem podpogramu glede na izbiro vrniti nazaj v meni, to samo premakneš znotraj
zanke.

ABX ::

Naslednje vprašanje.

Kako brišem podatke ven iz file-a?

Jih znam vpisovati ter zamenjat, vendar nisem še pogruntal kako jih zbrisat.

Recimo da zgleda takole:
(list.txt)
Ena
Dva
Kr_neki
tralala
.
.
.


Kako izbrišem eno določeno polje (ne z številko ampak natančno podano besedo).




Vaša inštalacija je uspešno spodletela!

OwcA ::

Mislim, da ni druge, kot da celotno vsebino prebereš v pomnilnik, jo obdelaš in zapišeš nazaj. Če obstajajo kakšna posebna pravila zapisa lahko ta postopek seveda optimiziraš.

ABX ::

To že da jo moram naložit celotno vsebino. Vendar ne poznam ukaza za brisat polja.

Za spreminjat polja uporabljam ukaz
"$list =~ s/$oldString/$newString/g;"

Sem malo razmišljal o ukazu "grep" vendar če se dve besede začnejo z istimi črkami mi jih zbriše obe.
Vaša inštalacija je uspešno spodletela!

Zgodovina sprememb…

  • spremenilo: ABX ()

govno ::

najbolje je, da prepišeš datoteko z novo, prazno:

open(FILE, ">", "file.txt");
close(FILE);

znak < je enak brez znaka = read-only
znak > = prepiši
znak >> = dodaj

lp

ABX ::

Rešil thx.
Vaša inštalacija je uspešno spodletela!

ABX ::

O.K novo vprašanje.

Kako dobit vrednost iz sistema.

Primer:
Ker bi rad preveril če je računalnik v mreži, preden mu pošljem ukaz sem se spomnil na ukaz PING in errorlevel.

PING IME_PC-a
Replay from ....
%Errorlevel% = 0

PING IME_PC-a
Bad IP adress IME_PC-a
%errorlevel% = 1

Zdaj me zanima kako dobit vrednost errorlevel v perl scripto?
Vaša inštalacija je uspešno spodletela!

ABX ::

Rešil z
$ouput = system("system_command");


Vaša inštalacija je uspešno spodletela!

ABX ::

Čeprav zadeva deluje že kot monolog, imam naslednje vprašanje.

Kako v perlu sortirat eno vrstico.
Primer:

Current time at \\pc1 is 11/18/02 5:17 PM

Kako bi dobil ven samo vrednost "5:17" ?
Vaša inštalacija je uspešno spodletela!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

The RPC server is unavailable ... n^tič

Oddelek: Operacijski sistemi
141432 (1278) noraguta
»

[Python] učenje

Oddelek: Programiranje
372668 (1965) Isotropic
»

MS-DOS Elektronček Blagajna

Oddelek: Programska oprema
182678 (2216) _vrag_
»

[c++] goto,jump

Oddelek: Programiranje
181641 (1424) 64202
»

Ukaz "net send" ne dela več?!

Oddelek: Pomoč in nasveti
71086 (933) bastadu

Več podobnih tem