LINUXSOFT.cz Přeskoč levou lištu

ARCHIV



   

> Diskuze: Poradna perl

perl
(link)
30.10.2008 15:02
Martin
Věk: ( ~39 let)

1. potrebuju rozdelit radu znaku, tak ze po kazdem 6.znaku bude odradkovani(\n)
Priklad: 123456123456123456 na
123456
123456
123456

2.chci smazat text od urciteho radku, jinak: vim co obsahuje radek od ktereho chci smazat zbytek textu. Jak?

Re: perl
(link)
30.10.2008 16:09
Hynek (Pichi) Vychodil
Věk: ( ~49 let)
Nějaká školní úloha?
1.
perl -e 'my $a = "123456123456123456"; $a =~ s/(.{6})/$1\n/g; print $a'
2.
echo -e "a\nb\nc\nhere\nd\ne" | perl -ne 'not(/here/ .. eof) and print'
Re: perl
(link)
31.10.2008 16:21
Martin
Věk: ( ~39 let)

Mam v poli (@pole) data typu 00 01 00 02 00 03 00 04 .. .. .. a to potrebuju rozdelit na 00 01 odradkovat 00 02 odradkovat tj. po kazdem 6.znaku odradkovat.

@pole =
foreach $rada (@pole) {
$radek =~ a v tomto miste se mi nedari dosahnout toho odradkovani

}

a pak tam potrebuju naprogramovat to smazani od urciteho radku, z vasi odpovedi jsem to nepochopil, mohl by jste mi pomoci ze to napisete tak ze to klic.slovo na radku bude napr. Slovo15
dekuji

Re: perl
(link)
31.10.2008 18:52
Hynek (Pichi) Vychodil
Věk: ( ~49 let)

Zásadní otázka je odkud se ta data vezmou a kam mají přijít. Mnou uvedené ukázky úlohu řeší, ale díky tomu, že tyto zásadní okrajové podmínky nebyly definovány, tak jsem si je zvolil tak, aby bylo řešení pro mě co nejjednodušší. Dokud nenapíšete jasně proč, odkud kam se má co? Tak se nehneme z místa. Prostě nedostatečně zadaná úloha. Vzhledem k tomu, že mám za sebou profesionálně naprogramováno desítky tisíc řádek perl kódu, tak vám můžu zcela seriózně říci, že těch řešení takové množství, že si to asi ani nedokážete představit. Všimněte, že klasická školní úloha bývá zadána ve stylu: čísla se budou číst ze standardního vstupu, udělá se s nimi tohle a tohle a výsledek se zobrazí na standardní výstup. Nebo vstup se načte ze souboru a výstup se pošle na tiskárnu a podobně. Stejně tak v profesionálním programování se definuje, že se data dostanou v takové a takové formě a výsledek se pošle dál v jiné formě. Nikdy se nedefinuje jen ten prostředek. Bez toho je to zadání k ničemu a výsledek takové práce taktéž. Například, ta druhá úloha se podstatně jinak řeší, když to má být řádková utilita, tak jak jsem to naprogramoval, než když se to řeší v rámci nějakého složitějšího programu a úplně jinak když vstupem je například pole. Stejně tak když ty data mám poslat na STDOUT, nebo dál zpracovat.

Re: perl
(link)
3.11.2008 08:35
Martin
Věk: ( ~39 let)

Data zisjam na zaklade dotazu na prislusny stroj, tom vas nebudu zatezovat. Ktery mi vrati "pole cisel" ve tvaru jak jsem psal. A vystup nikam posilat zatim nechi, pac je hodlam dal zpracovavat do grafu (gnupolot). Potrebuji, upravit pole na mou potrebu, tj.aby kazdy radek byl ve tvaru 00 xx (tzn. 00 01 nebo 00 4C..) pote jeste budu potrebovat cisla prevest do desitkovy soust. jelikoz tyto jsou v hexa.
Tudiz v poli @vypis mam cisla ve tvaru
00 01 00 02 00 01 00 01 00 01 00 01 00 01 00 01
00 01 00 01 00 01 00 01 00 01 00 01 00 08 00 2C
00 4C 00 2C 00 08 00 02 00 01 00 01 00 01 00 01
..
..

a chci tvar
00 01
00 02
00 01
..
..

a to ve 32 bloku po 16x16 cisel, posledich 16bloku potrebuji smazat a zbyvajicich prvnich 16 upravit na prislusny tvar. Kazdy blok je uvozen jeste slovem Hex-STRING.1 az 32. Ale ty smazat dokazu..

Re: perl
(link)
3.11.2008 09:36
Martin
Věk: ( ~39 let)

Menim dotaz!
Mam "to" pole o 500radcich, a chci ho od 250 radku smazat. Bud vim cislo radku(tj.ten 250), nebo co v nem je obsazeno (neco jako Hex-STRING.17).

Re: perl
(link)
3.11.2008 10:52
Hynek (Pichi) Vychodil
Věk: ( ~49 let)
Opět si musím spoustu věcí domýšlet, ale budiž
my @result;
foreach (@vypis) {
  last if /^Hex-STRING\.17/;
  s/^Hex-STRING\.\d+//;
  s/\s//g;
  push @result, map {ord} split//, pack("H*", $_);
}
A jsou z toho rovnou ty výsledná čísla.
Re: perl
(link)
3.11.2008 10:57
Hynek (Pichi) Vychodil
Věk: ( ~49 let)

A safra. Zapoměl jsem, že je to po dvou.
Tak tedy:
<pre>
my @result;
foreach (@vypis) {
last if /^Hex-STRING\.17/;
s/^Hex-STRING\.\d+//;
s/\s//g;
push @result, unpack( "n*", pack( "H*", $_ ) );
}
</pre>

Re: perl
(link)
3.11.2008 11:00
Hynek (Pichi) Vychodil
Věk: ( ~49 let)
A safra. Zapoměl jsem, že je to po dvou. Tak tedy:
my @result;
foreach (@vypis) {
    last if /^Hex-STRING\.17/;
    s/^Hex-STRING\.\d+//;
    s/\s//g;
    push @result, unpack( "n*", pack( "H*", $_ ) );
}
Re: perl
(link)
3.11.2008 11:11
Martin
Věk: ( ~39 let)

Dekuji, vyresil jsem to jinak, ale dekuji. Kouknu na to. Jiz mam posledni problem:
Mam ty cisla vypsane pod sebou ale jsou v hexa. tj. napr.4C 13 1B a potrebuju je do desitkovy..
Cisla mam v promnene $tmp, tudiz kdyz si dam print $tmp vyise se mi napr.
01
00
13
1B
4C
..
..
a chci je prevest, uz jste mi jednou radil s prevodem do osmickove pres pack.., ale nakonec jsem se tomu vyhnul formatovanim pres sprintf, ale pres sprintf mi to ed nejde.

Re: perl
(link)
3.11.2008 11:24
Hynek (Pichi) Vychodil
Věk: ( ~49 let)
Nerozumim, mě to funguje:
perl -le 'my @vypis = <>; my @return;
foreach (@vypis) {
    last if /^Hex-STRING\.17/;
    s/^Hex-STRING\.\d+//;
    s/\s//g;
    push @result, unpack( "n*", pack( "H*", $_ ) );
}
print foreach @result;' <<EOF
Hex-STRING.1 00 01 00 02 00 01 00 01 00 01 00 01 00 01 00 01
Hex-STRING.2 00 01 00 01 00 01 00 01 00 01 00 01 00 08 00 2C
Hex-STRING.3 00 4C 00 2C 00 08 00 02 00 01 00 01 00 01 00 01
Hex-STRING.17 00 4C 00 2C 00 08 00 01 00 01 00 01 00 08 00 2C
Hex-STRING.18 00 01 00 01 00 01 00 01 00 01 00 01 00 08 00 2C
EOF
1
2
1
1
1
1
1
1
1
1
1
1
1
1
8
44
76
44
8
2
1
1
1
1
Re: perl
(link)
3.11.2008 11:35
Martin
Věk: ( ~39 let)

Omlouvam se za vas cas! Muj problem je ze se nejdriv ptam a potom myslim..
Stacilo pridat "slovo" hex pri prirazovani do promene.
jeste jednou se omlouvam. A DEKUJI.

Re: perl
(link)
3.11.2008 15:07
Martin
Věk: ( ~39 let)

Prece jen bych mel dotaz, potreboval bych vysvetlit jak funguje ten prevod z Hexa do desitkovy soustavy.
Nejlepe s komentarem koukal jsem i do perldoc ale neni mi to jasne. Nejlepe na prikladu jednoduchem prikladu. Neco jako priklad: mam v $num_hexa = 4c; preved ho do desitove soust.

Re: perl
(link)
3.11.2008 16:27
Hynek (Pichi) Vychodil
Věk: ( ~49 let)
Co se týče pack a unpack, tak většinou to musím vždycky zkusit. Celé je to takové zmatené. Například u pack v template aAZ znamená v jakém formátu bude výsledek a u všeho ostatního co je vstupní hodnotou. Co je ale důležité vědět, tak výstupem pack je binárně zakódovaný výsledek a ten je vstupem unpack. Takže když mám vstup hexa číslo (ve skutečnosti string obsahující znaky toho hexa zápisu) tak to musím převést do binárky, kde každý byte bude odpovídat příslušné dvojici perl -le 'print pack("H2", "4c")'. Výsledkem je binary string obsahující jeden znak "L" s hodnotou v hexa 4c. A teď když tu binárku chci rozpakovat na číslo nebo string v jiném formátu, tak musím použít unpack. Jeden byte je char, tedy perl -le 'print unpack("C", pack("H2", "4c"))' mi to převede na jedno číslo, které mi říká jaká hodnota toho byte je. Pokud mám dva hexa byte, tak je to převod pomocí unsigned short v big-endian perl -le 'print unpack("n", pack("H4", "014c"))'. Aby to všechno běhalo hodně rychle, tak je nejlepší to celé zpracovávat jedním vrzem a proto perl -le 'print join ",", unpack("n*", pack("H*", "014c0001000200080080"))', které je v perlu skutečně výkonné.

DISKUZE

perl 30.10.2008 15:02 Martin
  L Re: perl 30.10.2008 16:09 Hynek (Pichi) Vychodil
    L Re: perl 31.10.2008 16:21 Martin
      L Re: perl 31.10.2008 18:52 Hynek (Pichi) Vychodil
        L Re: perl 3.11.2008 08:35 Martin
          L Re: perl 3.11.2008 09:36 Martin
            L Re: perl 3.11.2008 10:52 Hynek (Pichi) Vychodil
              |- Re: perl 3.11.2008 10:57 Hynek (Pichi) Vychodil
              L Re: perl 3.11.2008 11:00 Hynek (Pichi) Vychodil
                L Re: perl 3.11.2008 11:11 Martin
                  L Re: perl 3.11.2008 11:24 Hynek (Pichi) Vychodil
                    |- Re: perl 3.11.2008 11:35 Martin
                    L Re: perl 3.11.2008 15:07 Martin
                      L Re: perl 3.11.2008 16:27 Hynek (Pichi) Vychodil




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

28.11.2018 23:56 /František Kučera
Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1

12.11.2018 21:28 /Redakce Linuxsoft.cz
22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář

6.11.2018 2:04 /František Kučera
Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

4.10.2018 21:30 /Ondřej Čečák
LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář

18.9.2018 23:30 /František Kučera
Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář

9.9.2018 14:15 /Redakce Linuxsoft.cz
20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business. Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář

12.8.2018 16:58 /František Kučera
Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář

16.7.2018 1:05 /František Kučera
Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

31.7.2023 14:13 / Linda Graham
iPhone Services

30.11.2022 9:32 / Kyle McDermott
Hosting download unavailable

13.12.2018 10:57 / Jan Mareš
Re: zavináč

2.12.2018 23:56 / František Kučera
Sraz

5.10.2018 17:12 / Jakub Kuljovsky
Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze