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 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

    Ladislav Hagara | Komentářů: 0
    včera 23:44 | Nová verze

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 0
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 4
    21.4. 19:11 | Komunita

    Thunderbird 128, příští major verze naplánovaná na červenec, přijde s nativní podporou Exchange napsanou v Rustu.

    Ladislav Hagara | Komentářů: 25
    21.4. 04:44 | Komunita

    Byly vyhlášeny výsledky letošní volby vedoucího projektu Debian (DPL, Wikipedie). Novým vedoucím je Andreas Tille.

    Ladislav Hagara | Komentářů: 7
    21.4. 00:11 | Nová verze

    Po osmi měsících vývoje byla vydána nová verze 0.12.0 programovacího jazyka Zig (GitHub, Wikipedie). Přispělo 268 vývojářů. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 2
    20.4. 23:55 | Pozvánky

    Poslední měsíc byl plný zajímavých akcí, o kterých Vám bastlíři z projektu MacGyver mohou povědět, protože se na ně sami vydali. Kde všude byli, ptáte se? Objevili se na Installfestu, Arduino Day, Hackaday Europe a tajném srazu bastlířů z Twitteru. A z každé akce pro vás mají zajímavé poznatky.

    … více »
    bkralik | Komentářů: 1
    KDE Plasma 6
     (71%)
     (10%)
     (2%)
     (18%)
    Celkem 674 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.