Hirdetés

2017. június 23., péntek

Hozzászólások

(#1) tildy


tildy
(PH! nagyúr)

Sziasztok!

Úgy láttam PERLlel kapcsolatos topic még nincs, gondoltam nyitok egyet.
de hogy ne csak úgy lógjona levegőben a dolog, rögtön lenne egy kérdésem is.
Asszociativ tomb esetén (hash) miért kell idézőjelek közé rakni az értékeket?

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#2) tildy


tildy
(PH! nagyúr)

Ennyire senki?
PAckage készítésben segítség valaki?

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#3) Lortech válasza tildy (#1) üzenetére


Lortech
(PH! addikt)

Jól értem, az a kérdés, hogy miért ilyen a szintaktikája? Mert .. :D
Vagy írj egy példát, hogy pontosan mi okozza a gondot. Package szintén. Valamit konyítok hozzá, de élesben nem használtam, csak azért tanultam régebben, hogy ehhez is hozzá tudjak szagolni.

(#4) tildy válasza Lortech (#3) üzenetére


tildy
(PH! nagyúr)

Szeretnek egy programot írni, ami függvényeket hív meg.
A függvények legyenek mondjuk a Teszt.pm-ben, itt legyen mondjuk 3 fv. (lenyegtelen mit csinal jelen esetben)
Legyen egy teszt.pl , amelyben meghívjuk a Teszt.pm némely függvényét.
A kérdés: miknek kell lennie a Teszt.pmben, azon kívűl, hogy a függvényeknek?
Mi az az ISA?
Miket kell még beleírni a pm-be?

Perpill ennyi.

"Tartsd magad távol azoktól, akik le akarják törni az ambíciódat! A "kis" emberek mindig ezt teszik, de a nagyok éreztetik veled, hogy te is naggyá válhatsz" - Mark Twain

(#5) Lortech válasza tildy (#4) üzenetére


Lortech
(PH! addikt)

pl:
A hívó:
$ cat elso.pl

use elso;

my $log_base = $elso::e;
print ''Log base: $log_base\n'';
my $radius = 10;
my $area =
elso::circle_area($radius);
print ''Area = $area\n'';


A modul :
$ cat elso.pm

use strict;

package elso;
our ($pi, $e);


$pi = 3.14159;
$e = 2.7182818;

sub circle_area
{
my $radius = shift;
return ($pi * $radius * $radius);
}
1;

A kimenet:
Log base: 2.7182818
Area = 314.159


elso.pl -t kell futtatni ezekután (perl elso.pl).
A példát innen ([link]
) loptam, Itt találsz egy használható leírást packagekről modulokról és a my, our jelentéséről.
Megmondom őszintén ISA-ról sokminden eszembe jutott, de perl kontextusban semmi. :U Nem használtam még, nem tudom, mire jó.

(#6) nukewar


nukewar
(kvázi-tag)

Látom kihalt a topic...
Akkor egy kérdés:
Hogyan kezelem a perl paraméterét?
pl.:

perl akármi.sh paraméter

Itt a paramétert akarom használni változó értékeként a programban.
A bash féle $1 úgy látom nem működik.
Tippek? :)

(#7) nukewar válasza nukewar (#6) üzenetére


nukewar
(kvázi-tag)

Na, közben kihámoztam egy netes forráskódból a lényeget.

$ARGV[0] -ként kell rá hivatkozni. Úgy látszik ez az ARGV valami kiemelt változó. Sőt, mi több egyenesen tömb.

perl akármi.sh 88

A programban pedig:

$result=$ARGV[0];

$result értéke 88 lesz.

Köszi a segítséget! :DDD

(#8) piadex2


piadex2
(senior tag)

open(READ,"<audi.txt");

$counter = 0;

while( $line = <READ> ){
if($line =~ m/Horch/)
{
# {print "found Horch";
$counter++;
}else{
# print "there's no Horch\n";
}
}#while
if ($counter > 0)
{print "found Horch $counter time(s)";
}else{
print "there's no Horch\n";
}

close READ;
$_ = <STDIN>;

Ez a kód egy többsoros szövegben, amiben többször szerepel az, hogy Horch miért csak egyszer veszi észre?
Előre is kösz a segítséget.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#9) piadex2 válasza piadex2 (#8) üzenetére


piadex2
(senior tag)

Mert az egész szöveg bekerül a $line-ba, így a ciklus csak egyszer fut le, aminek következtében a $counter csak eggyel növelődik.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#10) piadex2


piadex2
(senior tag)

Sziasztok!

Hogyan lehet megoldani, hogy a program kiírja, hogy hányszor szerepel a Horch a szövegben. Van olyan is, hogy egy sorban többször is szerepel a Horch.
Előre is kösz.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#11) vipisti válasza piadex2 (#10) üzenetére


vipisti
(tag)

Pl. így:
$n = ($str =~ tr/Horch//);

Gnothi seauton.

(#12) piadex2 válasza vipisti (#11) üzenetére


piadex2
(senior tag)

Hello!

A kódot köszönöm, ment vele kapcsolatban kérdés privátban.
Újabb kérdés támadt:
van egy szöveg, amiben a "hide" szó többször előfordul. Hogyan lehet olyat csinálni, hogy megkeresem a hide szót, és - mivel ez egy html kód - megkeresem a hide szó előfordulása közvetlen előtti kacsacsőr mentes részt?
kacsacsőr mentes rész: nem kezdődik kacsacsőr és nem is végződik, pusztán a szöveg látható
Előre is kösz a segítséget.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#13) vipisti válasza piadex2 (#10) üzenetére


vipisti
(tag)

Kösz a figyelmeztetést, az előző kód nem azt csinálja, amit kértél. Nem ártott volna legalább kipróbálnom, bocs... :W
A helyes megoldás:

$n++ while ($str =~ /Horch/g);

Gnothi seauton.

(#14) vipisti válasza piadex2 (#12) üzenetére


vipisti
(tag)

<hide>ezt a szöveget akarod kiszedni?</hide>

A megoldás:
print "$1\n" while ($str =~ /\<hide\>([^<>]+)\<\/hide\>/g);

Lényeges része a mintának a [^<>]+, amivel tetszőleges karaktersorozatot engedsz meg, kivéve a kacsacsőröket.

Gnothi seauton.

(#15) piadex2 válasza vipisti (#14) üzenetére


piadex2
(senior tag)

Hello!

Először is kösz a segítséget.
Másodszor: pedig lenne egy olyan problémám, hogy a html kódból szeretném kiszedni a szöveget. Azt a részt, ami így : ...> szöveg szöveg ... szöveg <... található meg - vagyis kifordított kacsacsőrök között van.
Én már írtam rá kódot:
open(READER,"szoveg.htm");

while( $line = <READER> ){

if ($line =~ /\>([^<>]+)\</g){
$gyujtes = $line;
}

print "$gyujtes\n";
}

close READER;
$input=<STDIN>;

de nem úgy működik - nem tudom miért -, ahogy kellene.
Segítség ill. előre is kösz a segítséget.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#16) vipisti válasza piadex2 (#15) üzenetére


vipisti
(tag)

open(READER,"index.html");
@contents = <READER>;
close READER;

$contents = join '', @contents;

while ($contents =~ /\>([^<>]+)\</g)
{
print "$1\n";
}

Kiindulásnak használd a fentit. A kód tényleg csak a ><-ök közti szövegeket nézi így, de ne felejtsd el, h a html tagok egymásba ágyazhatók (ezért lesznek ennek az outputjában üres sorok, pl. </div></div> miatt).

Gnothi seauton.

(#17) vipisti válasza piadex2 (#15) üzenetére


vipisti
(tag)

Ja, még valami. A =~ operátor megcsinálja a mintaillesztést, de változatlanul hagyja a bal oldalán levő változót (amiben keresel). Ha használsz csoportsítást a mintában ()-kel, akkor a zárójeleken belüli találat a $1-ba kerül (több csoportnál rendre $2, $3 stb.).

Gnothi seauton.

(#18) piadex2


piadex2
(senior tag)

Hello!

Kösz a segítséget!
Máshol azt ajánlották, hogy a perlben HTML parser-t használjak, mert különben nagyon elbonyolodok - mivel ez a válasz előbb jött ezt az utat kezdtem el bejárni.
Most viszont egy olyan kérdésem lenne, hogy az alábbi kód:
my ($one, $two) = 2;

print "$one plus $two\n";
print "$two\n";

miért nem azt adja ki, hogy:
2 plus 2
2
miért azt, hogy:
2 plus

-----vége------
Igazából az egyszerre történő értékadást próbáltam tesztelni, és ezért állok értetlenül az eredmény előtt.
Előre is kösz a segítséget!

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#19) piadex2 válasza piadex2 (#18) üzenetére


piadex2
(senior tag)

Hello!

Eredetileg my ($one, $two) = @_; volt. Kiderült, hogy a @_ egy lista. Innentől kezdve nyilvánvaló volt, hogy a "my ($one, $two) = 2;" helyett "my ($one, $two) = (1,2);" kell, és akkor minden érték látszódik.
Téma lezárva.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#20) vipisti válasza piadex2 (#18) üzenetére


vipisti
(tag)

A minták használatát, meg az alap perles dolgokat nem árt, ha először megtanulod/begyakorlod. Persze a CPAN tele van már megírt modulokkal, komplexebb problémák megoldása előtt nem árt böngészni.

Gnothi seauton.

(#21) piadex2


piadex2
(senior tag)

Hello megint!

Van egy file-om: file, amit hiába próbálok a HTML Parserrel feldolgoztatni pl úgy, hogy a HTML kódot egy másik file-ba másoltatom, mindössze egy üres file-t kapok végeredményül. Mit csinálok rosszul? (ha egyszerűbb html file-lal próbálkozom, akkor nincs gond)
Előre is kösz a segítséget.

piadex2

vipisti: amúgy átnéztem (úgy ahogy) a reguláris kifejezéseket, a file műveleteket, meg még néhány alapot - elméletileg elégnek kell lennie ezeknek

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#22) piadex2 válasza piadex2 (#21) üzenetére


piadex2
(senior tag)

Hello!

Azt hittem, hogy valami nagy probléma van, amiről nem tudok, de kiderült, hogy a feldolgozandó file nevét rosszul ütöttem be ezért nem történt semmi.
Elnézést a fórum terheléséért.

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#23) piadex2


piadex2
(senior tag)

Sziaszok!

Ha van egy kódom, ami megkeresi az összes w-vel és nagy w-vel kezdődő szót, akkor hogyan kell módosítani ezt a programot ahhoz, hogy a megtalált szavakat kiírja a képernyőre?
Előre is kösz a választ:

piadex2

ha üzenni akartok, akkor légyszíves privát üzeneteken, e-mailen vagy telefonon (06705022167) keresztül tegyétek! köszi

(#24) furu818


furu818
(újonc)

Hali!

Nem tudja valaki véletlenül, hogy egy helyi hálózatban lévő géphez hogyan tudok hozzáférni? Csak a könyvtár struktúráját akarnám bejárni, és pár dolgot kimásolni.
A gép a hálózaton simán "\\gepnev\akarmi" formában érhető el és tartozik hozzá külön jelszó és felhasználónév.
Ha esetleg valaki tudja, hogy hogyan kell elérni sima open függvénnyel, vagy valamilyen modullal az kérem írjon!

Köszi

(#25) !wannabe


!wannabe
(tag)

# na élesszük fel

Sziasztok!

Írnék egy scriptet amely egy beolvasott listából (amelyben szerepel vezeteknev, keresztnev) kislistázni azokat amelyeknek a keresztneve paratlan hosszusagu. A megszokott ($_%2) stringekre nem működik csak számokra ha jól sejtem. Hogyan lehetne megvizsgálni, hogy egy string páros vagy páratlan hosszusagú-e?

Előre is köszi a válaszokat.

(#26) szilu84 válasza !wannabe (#25) üzenetére


szilu84
(kvázi-tag)

$string = "hello";
$hossz = length $string;

if ( $hossz % 2 eq 1 ) {
print "paratlan\n";
}
elsif ( $hossz % 2 eq 0 ) {
print "paros\n";
}

Ha még aktuális egyáltalán :DDD

(#27) !wannabe


!wannabe
(tag)

Szia,

Köszi a megoldást, persze ez mindig aktuális :)

(#28) buherton


buherton
(őstag)
LOGOUT blog

Nem tegnap volt az utolsó hsz, de hát ha ide téved valaki.

Kérdésem: hogyan lehet shell szkriptet programozni perlben? Gondolok itt az install-tól, az ls-ig.

[ Szerkesztve ]

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, eben - !!! Tanúlyunk már meghejjessen irni... !!!

(#29) Jester01 válasza buherton (#28) üzenetére


Jester01
(PH! kedvence)

Ezt a kérdést nem is értem :F
A shell scriptet a shell futtatja. A perl scriptet meg a perl. Fából vaskarika?

Jester

(#30) buherton válasza Jester01 (#29) üzenetére


buherton
(őstag)
LOGOUT blog

Értem, bocsi a buta kérdésért. Akkor a shell-es dolgokat abban kell írni :O . Fordító mindenre érzékeny...

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, eben - !!! Tanúlyunk már meghejjessen irni... !!!

(#31) alapz@j válasza buherton (#30) üzenetére


alapz@j
(tag)

Lehet hogy rosszul értem, de arra vagy kíváncsi, hogy hogyan lehet Perl programból shell utasításokat kiadni? Mert erre vannak a system(parancs) és az exec(parancs) utasítások, a system bevárja az eredményt, az exec pedig csak végrehajt. Ha az eredménye is kell a folyamatnak, akkor backtick:

exec(PROGRAM);
$sikerultvagynem = system(PROGRAM);
$kimenet = `PROGRAM`;

(#32) buherton válasza alapz@j (#31) üzenetére


buherton
(őstag)
LOGOUT blog

Igen arra gondoltam :) . Köszi :R . Ki tudja mikor jön jól. Mert ebben talán egyszerűbb program telepítő csomagot összedobni mint shell szkriptben. Vagy éppen grub helyreállítót összedobni, nem kell mindent sort mindig leírni, stb...

tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, eben - !!! Tanúlyunk már meghejjessen irni... !!!

(#33) Osiris


Osiris
(őstag)

Sziasztok!

Van egy @array tömböm, aminek az elemei karakterláncok -> nevek: vezetéknév+keresztnév+harmadiknév+és így tovább. Ezt a tömböt szeretném rendezni keresztnév szerint, vagyis a az első szóköz utáni listalem szerint.
Mi erre a megoldás? :F

(#34) alapz@j válasza Osiris (#33) üzenetére


alapz@j
(tag)

Ezen az oldalon alul vannak példák az ilyen rendezésekre.

(#35) Mijo válasza Osiris (#33) üzenetére


Mijo
(kvázi-tag)

Gondolom már nem aktuális, de jól esett kitalálni a megoldást:

#!/usr/bin/perl

use strict;

my @input = (
'1.+Béla',
'Örök+Eutanázia+Roberta',
'Kiss+Miska+András',
'Aaa+Aaa',
);

sub def_k {
shift =~ m/\+([^+]+)/;
return $1 || "";
}

my @output =
#map { $_->{'o'}}
sort { $a->{'k'} cmp $b->{'k'} }
map +{ 'o'=>$_, 'k'=> def_k($_) }, @input;

foreach my $o (@output) {
#print join( "\n", @output );
print $o->{'k'}.' -- '.$o->{'o'}."\n";
}

Az alkalmazott ötlet a http://en.wikipedia.org/wiki/Schwartzian_transform. A két kommentelt sor a teszteléshez van, élesben az első map veszi ki az eredeti stringeket a hashekből.
Remélem valakinek még hasznos lesz!
Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#36) alapz@j


alapz@j
(tag)

Félofftopic, de megjelent a Perl 5.14, benne teljes Unicode 6 támogatással, gyorsabb futás mellett kevesebb memórifogyasztással és sok más okossággal. Részletesebben pl. itt:
[link]

[ Szerkesztve ]

(#37) Peter789


Peter789
(senior tag)

Sziasztok!

az alábbi kis linuxos perl kód módosítására szeretnék segítséget kérni:

#!/usr/bin/perl

$file = '/dev/ttyS1';
open(SER, $file);

while (TRUE)
{
$input = getc(SER);
print $input;
}

close(SER);

ez szép és jó, de csak soronként hajlandó fogadni a bejövő karakterláncokat - mindig vár egy ASC10 vagy 13-ast, akkor lép csak tovább a print-re

létezik karakter típusú változó, amivel mindig továbbmenne ? vagy van rá valami más megoldás ?

előre is köszönöm a válaszokat,
Péter

----------------------------------------------------------------------------------------------------------------- AquAgorA ...Pál apostol nyomában:                                                                          http://fleettracker.eu/index.php/component/aquagora

(#38) Mijo válasza Peter789 (#37) üzenetére


Mijo
(kvázi-tag)

Szia!
Első tanács, használj objektumokat, pl. ezt:
http://search.cpan.org/~cook/Device-SerialPort-1.002/SerialPort.pm
Gondolom van még számos a CPAN-on, ami a soros portot kezeli.

A getc leírása szerint, ez a függvény nem alkalmas a karakterenkénti olvasásra, mert entert vár hozzá, ahogy írtad is.
Meg lehetne próbálni a különböző olvasó függvényeket: sysread, read,...

létezik karakter típusú változó, amivel mindig továbbmenne ?
Konkrétan karakter típus nincs. Skalár van, ami tárolhat egy vagy több karaktert (stringet), egész vagy tört számot (integer, float, ...), meg egyebeket (objektumok, referenciák,...), de ezek között nincs éles határ, mint C-ben.
A kérdésed abból a szempontból rossz, hogy nem a változóddal mondod meg a függvénynek, hogy mikor és mivel térjen vissza.

Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#40) Osiris


Osiris
(őstag)

Szasztok!

Van egy $sor változóban egy karakterláncom:

$sor = "Németország 276 DEU DE ISO 3166-2:DE"

Hogy tudom a $sor változó első 3db egymást követő számjegysorozatának az első indexét kideríteni?

Így szerettem volna, de nem jó:

$pos = (index ($sor, /\d\d\d/));

:F

(#41) Mijo válasza Osiris (#40) üzenetére


Mijo
(kvázi-tag)

Szia!

Ha a számok kellenek, akkor ezt a reguláris kifejezést tudom javasolni:
$sor =~ m/^[^\d]*(\d{3})/;
$szam = $1;

Ha a tényleg a pozíció érdekel:
$sor =~ m/^([^\d]*)\d{3}/;
$poz = length( $1 );

És ezt lehet kombinálni is. :)
$sor =~ m/^([^\d]*)(\d{3})/;
$poz = length( $1 );
$szam = $2;

Ajánlott olvasmány, ha Perlben sztringeket kell szabni-varrni:
http://perldoc.perl.org/perlre.html

Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#42) Osiris válasza Mijo (#41) üzenetére


Osiris
(őstag)

Kössz a gyors választ!

Azt nem értem, hogy a $1 és $2 változók azok mikor kapnak értéket?

(#43) Mijo válasza Osiris (#42) üzenetére


Mijo
(kvázi-tag)

Azok a reguláris kifejezésből kapják az értéket, a ( és ) közötti részeket veszik fel.
$str = 'abcdef';
$str =~ m/(...)(...)/;
print $1; # 'abc'
print $2; # 'def'

Amit linkeltem doksi oldal szépen leírja az összes lehetőséget. Ha magyarul szeretnéd inkább és nem ilyen mélységekben, ezt nézd meg:
http://nyelvek.inf.elte.hu/leirasok/Perl/

Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#44) Osiris


Osiris
(őstag)

Ez lett a megoldás:

$orszagnev = "USA Amerikai Csendes-óceáni szigetek 581 UMI UM ISO 3166-2:U";
chomp ($orszagnev);
$poz = index($orszagnev, "\t");
$orszagnev = substr($orszagnev, 0, $poz-1);
print "$orszagnev\n"

A kimenet:

USA Amerikai Csendes-óceáni szigetek

Ui.: a tabulátor szivatott, space-nek hittem.

@ Mijo:
Van itt előttem egy ~750 oldalas könyv, de valami összeszedettebb dolog kellene, majd megnézem amit linkeltél.
Thx!

[ Szerkesztve ]

(#45) Mijo válasza Osiris (#44) üzenetére


Mijo
(kvázi-tag)

Kezdetnek ezt a cikket, cikksorozatot megnézhetnéd, elég jól magyarázza az alapokat.
http://prog.hu/cikkek/443/Mintaillesztesek.html

Ha biztos vagy abban, hogy tab szeparált a sorod, ezt is használhatod:

$orszagnev = "USA Amerikai Csendes-óceáni szigetek 581 UMI UM ISO 3166-2:U";
chomp( $orszagnev );
@rekordok = split( /\t/, $orszagnev );
print "$rekordok[0]\n";

Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#46) Dumas


Dumas
(lelkes újonc)

Sziasztok!

Egy olyan problémám lenne, hogy per-lben kilistázok pár dolgot egy fájlba. Termék kódját és a termék elkészülésének dátumát. Jelenleg a termék kódja szerint rakja sorba őket. Őszinte leszek, nem igazán értek a perl-hez. A kérdésem az lenne, hogy, hogy tudnám megoldani, hogy dátum szerint rakja sorba a termékeket?
Tehát most úgy van, hogy mondjuk A-termék: 10:00 B-termék: 8:00 C-termék: 12:00.
Helyette kéne úgy, hogy: B-termék: 8:00 A-termék:10:00 C-termék:12:00.

Előre is köszönöm a választ annak aki esetleg tud segíteni benne :)

(#47) Mijo válasza Dumas (#46) üzenetére


Mijo
(kvázi-tag)

Szia!
Milyen struktúrában található az adatod?

Tömb esetén mondjuk legyen ilyen:

$data = [
[ 'A', '2012.08.24. 10:00' ],
[ 'B', '2012.08.24. 08:00' ],
[ 'C', '2012.08.24. 12:00' ],
];

Ezután szépen átalakítjuk:

my @sorted = sort { $a->[1] cmp $b->[1] } @$data;

Ez alap esetben szövegeket hasonlít össze, ha nem ilyen szép az időformátumod akkor érdemes egy függvényhívással ilyenre alakítani, ami a fenti linken a map { } @data rész lenne.

my @sorted = map { $_->[1] } # visszavesszük az eredeti rekordot
sort { $a->[0] cmp $b->[0] } # rendezünk timstamp szerint
map { [ make_timestamp( $_->[1] ), $_ ] } # elkészítjük a [ timestamp, [eredeti rekord] ] struktúrát
@$data; # bemenet

Remélem ennek segítségével sikerül megoldani, de kérdezz bátran, ha elakadasz!
Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#48) Dumas


Dumas
(lelkes újonc)

Köszi szépen, ez alapján megpróbálkozok vele :R , de igen, kicsit pontatlan voltam a leírásnál. Mert ráadásul az adatokat is máshonnan nyerem ki :)

Write_log("script started");
$mappres=MappNetSrc($netpath);
Write_log("mapping $netpath");
if($mappres==1)
{
my $name_date= get_timestamp4();
if(!(-d $netpath))
{
Write_log("mapping source error $_[0]");
}
else
{
Write_log("mapping source $_[0] is mapped succesfully");

if((opendir SO, $sourcedir) ==1)
{
Write_log("$sourcedir has been opened");
$today = get_timestamp3();

open out, ">", $lstfiledir.$name_date.'_'.$cell.'.lst' or die $!;
print out "Barkod;Ido\n";
while ($file = readdir(SO))
{
if ($file ne "." and $file ne "..")
{
$fidate=get_creation_time($sourcedir."\\$file");
if ($fidate gt get_timestamp())
{
Write_log("$sourcedir"."\\$file"." creation time is:".$fidate);
open input, "<","$sourcedir"."\\$file" or die $!;
#my $lines = <input>;
while (<input>)
{
#print $_;

$date_from_file =substr($_,0,10);
#print $today.'-'.$date_from_file.'';
if ($today eq $date_from_file)
{
#print $_;
my $out_date =substr($_,11,8);
my $out_ttnr =substr($_,24,6);
print out $out_date .';'.$out_ttnr."\n";

Itt a végén jön ki ugye a $out_date-nél a kimeneti dátum, a $out_ttnr, pedig a száma.
Jelenleg úgy gondoltam, hogy beviszem külön azt a részt amit most csak printelek a végén. És azt "sort"olom. ha az úgy megoldás lehet.

[ Szerkesztve ]

(#49) Mijo válasza Dumas (#48) üzenetére


Mijo
(kvázi-tag)

Szia!

Ha ilyen bonyolult az adatok kinyerése, talán inkább előbb írjad ki egy fájlba, majd a Tie::File modullal nyisd meg a fájlt, és rendezd a fenti módszerrel. Lehet egy kis tesztelést igényel, hogy mekkora cache-t kapjon a modul, hogy a jellemzően előforduló fájlmérettel gyorsan megbírkózzon, és ne kelljen a vinyóra pakolni folyamatosan.
Amit még tehetsz, hogy egyből Tie::File-ba pakolod az adatokat, majd a végén rendezel újabb megnyitás nélkül.

Üdv: Mijo

''Mit csinálnak a Windows gépek klaszterben? Hát egymás reset gombjait nyomkodják mikor másik elszáll...'' by Xebi@sg.hu

(#50) Peter789


Peter789
(senior tag)

sziasztok!

hátha még valaki téved errefelé... :)

valahogyan lehetséges a device::serialport-al vagy bármi mással perl alatt 9 bites csomagokat fogadni? a küldés nem is érdekes, csak a fogadás... adott egy speciális protokol, ahol a 8 bites adatcsomagokat mindig követi egy 9dik bit aminek szintnén van jelentősége - ez mondja meg hogy mikor kezdődik új parancs. lehet valahogy kezelni ezt az utolsó bitet? a databits csak 5,6,7,8 lehet - 9-nél ki is akad. esetleg valahogyan lehet a paritással bűvészkedni? aktiválni a paritás fogadását de ignorálni hogy hibás e a byte szerinte, viszont használni egyéb célra azt a bitet?

----------------------------------------------------------------------------------------------------------------- AquAgorA ...Pál apostol nyomában:                                                                          http://fleettracker.eu/index.php/component/aquagora

Copyright © 2000-2017 PROHARDVER Informatikai Kft.