abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 20:22 | Nová verze

    Byla vydána nová verze 2.45.0 distribuovaného systému správy verzí Git. Přispělo 96 vývojářů, z toho 38 nových. Přehled novinek v příspěvku na blogu GitHubu a v poznámkách k vydání. Vypíchnout lze počáteční podporu repozitářů, ve kterých lze používat SHA-1 i SHA-256.

    Ladislav Hagara | Komentářů: 0
    dnes 13:33 | IT novinky

    Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".

    Ladislav Hagara | Komentářů: 0
    dnes 01:00 | Nová verze

    Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.

    Ladislav Hagara | Komentářů: 0
    včera 16:33 | Nová verze Ladislav Hagara | Komentářů: 0
    včera 03:22 | Zajímavý článek

    V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …

    Ladislav Hagara | Komentářů: 0
    včera 00:11 | Nová verze

    Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.

    Ladislav Hagara | Komentářů: 6
    27.4. 17:44 | Nová verze

    Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    26.4. 17:11 | Nová verze

    Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.

    Ladislav Hagara | Komentářů: 12
    26.4. 13:33 | Nová verze

    Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.

    Pavel Křivánek | Komentářů: 9
    26.4. 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 49
    KDE Plasma 6
     (75%)
     (8%)
     (2%)
     (15%)
    Celkem 880 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Mazání se soboru v Perlu

    11.11.2009 12:03 TAPSOFT
    Mazání se soboru v Perlu
    Přečteno: 427×
    Prosím o pomoc. V stat1.txt souboru mám třeba toto nick1 nick2 nick2 nick4 a já potřebuji pomocí příkazu smazat určitý nick x

    do souboru to zapisuji takto open(STATISTIKA, ">>stat1.txt"); print STATISTIKA "$nick\n"; close(STATISTIKA);

    Za pomoc moc děkuji

    Řešení dotazu:


    Odpovědi

    11.11.2009 12:40 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Zkusil bych příkaz grep (existuje i v Perlu).
    Překladač ti nikdy neřekne: "budeme kamarádi"
    11.11.2009 13:09 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    příkaz grep jsem v perlu sice našel,ale nikde jeho použítí jak vymazat určité dané slovo ze souboru
    11.11.2009 13:17 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Nezkoušel jsem, takže jen rychle od boku (netvrdím, že je to optimální způsob, grep by asi byl jednodušší):
    $file = "stat1.txt";
    $nick = "nick xx";
    
    open (FILE, "<$file") or die "Can't open $file: $!\n";
    @lines = <FILE>;
    close FILE;
    
    open (STDOUT, ">$file") or die "Can't open $file: $!\n";
    
    foreach $line ( @lines ) {
        print $line unless /$nick/;
    }
    close STDOUT;
    
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    11.11.2009 13:49 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    děkuji ti moc,jdu hned zkusit
    11.11.2009 14:07 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    tak tohle nefunguje
    11.11.2009 14:48 NeoV | skóre: 23
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu

    Tu to maaas:

    use strict;

    my $file = "aaa"; # zazov suboru
    my $nick = "nick xx"; # nick na vymazanie

    my @lines;

    open (FILE, "<$file") or die "Can't open $file: $!\n";
    while(<FILE>) { push @lines,$_; }
    close FILE;

    open (STDOUT, ">$file") or die "Can't open $file: $!\n";

    for my $line ( @lines ) {
    print STDOUT $line unless($line =~ /$nick/);
    }
    close STDOUT;

    11.11.2009 15:31 moira | skóre: 30 | blog: nesmysly
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Blok while(<FILE>) { push @lines,$_; } se dá nahradit kratším @lines=<FILE>;
    Překladač ti nikdy neřekne: "budeme kamarádi"
    11.11.2009 15:08 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Jak "nefunguje"? Píše to něco? Nefunguje to jak sis představoval? Co to dělá? Křišťálovou kouli nemám...
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    11.11.2009 15:37 NeoV | skóre: 23
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    No ale tu koli nema ani on :-D

    btw. tvoj kod je v podstate cely spravne :-) Su tam 'len' 2 chyby na jednom riadku:
    print $line unless /$nick/;
    spravne to mas mat:
    print STDOUT $line unless($line =~ /$nick/);
    11.11.2009 15:48 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    No já chápu, že tazatel je asi (co se týče PERLu) mimo, ale napsat "nefunguje to" je fakt luxusní odpověď. :-)

    btw. Ten kod je v podstate správně až na tu podmínku - někde mi to uteklo při editaci a zbyl mi tam jen "pahýl" ... nicméně ještě tam musí být (alespoň podle té struktury stat1.txt dle tazatele) ten $nick "orámovaný", aby to nebralo násobné výskyty řetězce nebo části jiných (nick 1 vs. nick 10, nick 11 atd.)

    PS: Nehledě na to, že to celé jde napsat ještě PERLověji :-D
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    11.11.2009 17:18 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    nejsem mimo,ale tohle je jen holý mazání,musím to vložit do robota o 4500 řádkách a ještě nastavit proměnné a příkazy které to mažou,takže to trvá trochu déle než ti vyzkouším
    11.11.2009 15:48 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Předtím to nick neodebralo,ale ted to odebere a je to super,jsi fakt machr,děkuji moc
    11.11.2009 16:10 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    No machr rozhodně ne, ten by ti to napsal jako one-liner :-D :-D :-D :-D
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    11.11.2009 17:20 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    ale jo jde ti to,no to víš kdo umí,ten umí
    11.11.2009 19:19 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    ještě jeden dotaz,co když je ale v té složce nick = Jsi na blacklistu-důvod.... nick2 = Jsi na blacklistu-důvod.... a já tím pádem potřebuji vymazat celý řádek kterýbych ale hledal podle nick
    11.11.2009 20:15 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    v tom prípade použi výraz m/^$nick\b ... \b = zero length word boundary, t.j. za $nick môže byť koniec riadku alebo ľubovoľný znak iný ako alfanumberický
    11.11.2009 21:20 TAPSOFT
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    super,děkuji
    Řešení 1× (sdsdsd)
    11.11.2009 15:41 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    OK. Je tam jedna chyba -> regexp u unless má být správně unless ($line =~ /^$nick$/) jinak by to bralo pro nick1 i řádky nick10, nick11 atd. Takže správně takto:
    #!/usr/bin/perl
    
    $file = "stat1.txt";
    $nick = "nick 1";
    
    open (FILE, "<$file") or die "Can't open $file: $!\n";
    @lines = <FILE>;
    close FILE;
    
    open (STDOUT, ">$file") or die "Can't open $file: $!\n";
    
    foreach $line ( @lines ) {
        print $line unless ($line =~ /^$nick$/);
    }
    close STDOUT;
    
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    11.11.2009 15:48 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    ak už dávaš celý súbor do pamäti, prečo nepoužiješ grep ?
    $file = "stat1.txt";
    $nick = "nick 1";
    
    open (INFILE, "<$file") or die "Can't open $file: $!\n";
    open (OUTFILE, ">$file.new") or die "Can't open $file.new: $!\n";
    
    print OUTFILE grep $line !~ /^$nick$/, <INFILE>;
    
    close INFILE;
    close OUTFILE;
    
    unlink "$file";
    rename "$file.new", "$file";
    
    11.11.2009 16:09 NeoV | skóre: 23
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    no pokial sa hrame na zvrhlosti typu kto da najmansi kod, tak potom :-):
    $file = "stat1.txt";
    $nick = "nick 1";
    
    open(STDOUT, ">${file}.part");
    open(STDIN, "<$file");
    
    print for grep !/^$nick$/, <>;
    rename("${file}.part",$file);
    
    11.11.2009 16:33 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Případně ten stat1.txt flákneme jako argument toho skriptu a o zabackupovaný původní file ať se stará někdo jiný :-D :-D
    #!/usr/bin/perl
    $^I = "~";
    $nick = "nick 6";
    while (<>) {
    	print unless /^$nick$/;
    }
    
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    12.11.2009 14:14 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu

    To pak staci i

    #!/usr/bin/perl
    $nick = "nick 6";
    print grep {!/^$nick$/} <>;
    12.11.2009 14:51 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Tak mě napadá ... nešel by ten nick hodit jako druhý parametr? :-)
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    12.11.2009 15:21 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    takto ? :-D #!/usr/bin/perl -n BEGIN { $nick = pop }; /^$nick\b/ || print;
    12.11.2009 15:23 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    oops, <code> miesto <pre> :-(
    12.11.2009 15:40 myšák | skóre: 26 | blog: EmentuX | Ostrava
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Joooooooooo! Já věděl že to jde :-D :-D Smekám! Miluju PERL ... akorát ho furt používám tak nePERLovsky, až se stydím :-(
    Je nesmírně těžké být idiotem, konkurence je obrovská...
    12.11.2009 17:27 ph0enix | skóre: 18 | Praha
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu

    A co takhle?

    perl -e '$n=pop;print grep{!/^$n\b/}<>' data.txt nick6
    12.11.2009 00:03 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    Pokud ten nick cpete do regexpu tak by to chtělo \Q, \E a /o.
    In Ada the typical infinite loop would normally be terminated by detonation.
    12.11.2009 08:49 NeoV | skóre: 23
    Rozbalit Rozbalit vše Re: Mazání se soboru v Perlu
    alebo staci pouzit funkciu quotemeta

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.