- Ne legyetek bátorak, ha ezt a rollert választjátok - OOTD T10
- Honor 200 Pro - mobilportré
- Samsung Galaxy S23 Ultra - non plus ultra
- Légies iPhone halvány színei
- Samsung Galaxy S21 FE 5G - utóirat
- Google Pixel topik
- VoLTE/VoWiFi
- Mobil flották
- Android alkalmazások - szoftver kibeszélő topik
- Xiaomi 15 - kicsi telefon nagy energiával
Új hozzászólás Aktív témák
-
Mijo
tag
Szia!
A suttyó megoldást alább láthatod:my ($acknowledge, $error_number, $error_text);
my %net_ucp_config = (
SMSC_HOST => '111.111.111.111',
SMSC_PORT => 2222,
SENDER_TEXT => '+36111111111',
WARN => 1,
FAKE => 0
);
$emi = Net::UCP->new( %net_ucp_config )
|| Net::UCP->new( %net_ucp_config )
|| Net::UCP->new( %net_ucp_config )
|| die( "Failed to create SMSC object ".$! );
$emi->open_link() || die($!);Ha általánosan kell ez az ismétlés, lehet valami ilyennel próbálkozni:
sub retry_net_ucp {
my $obj = shift;
my $method = shift;
$obj->$method( @_ )
|| $obj->$method( @_ )
|| $obj->$method( @_ )
|| die "Error during $method on $object :".$!;
}Üdv: Mijo
-
Mijo
tag
Hiányolja a modult a két felsorolt útvonalból (@INC tartalma).
Nézzük meg, van-e ilyen fájl egyáltalán a rendszeren!
find / -name 'ReadLine.pm' 2>/dev/nullHogyan telepítetted a Perlt?
Elvileg ilyen hibának nem lenne szabad megjelenni a CPAN modul használatakor, mert vagy az alap Perlhez adott modulokat használja, vagy van fall back módszere.Mi a végső cél, amihez a Perl kell?
Ennyire nem bonyolult a Perl telepítése, lásd Perlbrew.
Ha csak frissebb Perlt szeretnél, próbáld meg ezzel, bár egy routeren lehet nem lesz elég hely hozzá, de lehet van külső tárhelyed. Így a rendszer Perl érintetlen maradhat.Üdv: Mijo
-
Mijo
tag
Szia!
Ez a bug 2-3 éves. Nem lett kijavítva valami frissebb verzióban?
Van arra lehetőség, hogy CPAN-ról letöltöd a tar.gz-t, és kézzel cseréled ki, aztán ráfrissítesz a Perl modulokra, hogy minden up to date legyen?Egyébként keress ezekre a sorokra:
sub my_dflt_prompt
sub my_yn_prompt
sub my_prompt_loopLesz ezekben a függvényekben "prompt" függvényhívás, azok elé kell várhatóan betenni ezt:
$prompts{$item} = "<missing prompt> $item";
Persze ha egy rendes diff-et tett volna be, sokkal egyszerűbb lenne...
Üdv: Mijo -
Mijo
tag
Szia!
Javaslom a non capturing groupot: (?:pattern)
Üdv: Mijo
#!/usr/bin/perl
use strict;
use warnings;
my @tests = (
'#0546NNN124:CH/FT0/FM2 RS ok',
'#0546NNN124:CH/FT2 RS ok',
);
for my $test ( @tests ) {
if ( $test =~ m!^
(\#0546NNN124:CH/FT\d+
(?:/FM\d+)?
)
\s+
RS
\s+
(\S+)
\s*
$!ix
) {
print "Match: code=[".$1."] status=[".$2."]\n";
} else {
print "No match: [". $test ."]\n";
}
}./test.pl
Match: code=[0546NNN124:CH/FT0/FM2] status=[ok]
Match: code=[0546NNN124:CH/FT2] status=[ok] -
Mijo
tag
Szia!
Ha ilyen bonyolult az adatok kinyerése, talán inkább előbb írjad ki egy fájlba, majd a Tie:
ile 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:ile-ba pakolod az adatokat, majd a végén rendezel újabb megnyitás nélkül.
Üdv: Mijo
-
Mijo
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; # bemenetRemélem ennek segítségével sikerül megoldani, de kérdezz bátran, ha elakadasz!
Üdv: Mijo -
Mijo
tag
Kezdetnek ezt a cikket, cikksorozatot megnézhetnéd, elég jól magyarázza az alapokat.
http://prog.hu/cikkek/443/Mintaillesztesek.htmlHa 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
-
Mijo
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
-
Mijo
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
-
Mijo
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
-
Mijo
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
Új hozzászólás Aktív témák
Hirdetés
- Eladó ÚJ csak bontott állapotban lévő Xiaomi Redmi 13C 4/128GB / 12 hó jótállás
- Telefon felvásárlás!! Honor 400 Lite, Honor 400, Honor 400 Pro
- Telefon felvásárlás!! Honor 90 Lite/Honor 90/Honor Magic5 Lite/Honor Magic6 Lite/Honor Magic5 Pro
- BESZÁMÍTÁS! 1TB Corsair MP700 NVMe SSD meghajtó garanciával hibátlan működéssel
- HUAWEI MateBook 13 2020 - Kijelző nélkül - I7-10510U - 16GB - 512GB SSD - Win11 - MAGYAR
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Promenade Publishing House Kft.
Város: Budapest