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 01:22 | Nová verze

    Byla vydána nová verze 8.0 (𝕏) frameworku pro vývoj webových aplikací Ruby on Rails (Wikipedie). Přehled novinek v příspěvku na blogu, v poznámkách k vydání a na GitHubu.

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

    Byla vydána verze R14.1.3 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek v poznámkách k vydání, podrobnosti v seznamu změn.

    JZD | Komentářů: 2
    včera 16:00 | Komunita

    Dnes v 17:00 má na YouTube online premiéru krátký film Project Gold od Blender Studia představující možnosti rozšíření Blenderu pro "malířský vzhled".

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Byl představen oficiální Raspberry Pi USB 3 Hub. Cena je 12 dolarů.

    Ladislav Hagara | Komentářů: 6
    včera 12:33 | Komunita

    Na YouTube byly zveřejněny sestříhané videozáznamy přednášek z letošního OpenAltu. Dostupné jsou také přímo z programu po kliknutí na přednášku.

    Ladislav Hagara | Komentářů: 3
    včera 00:33 | Humor

    Co přesně se děje, když se pomocí curlu připojujeme ke google.com? Proč to psát do terminálu, když si to můžeme pustit jako videoklip curl -v https://google.com na YouTube. 😂

    Ladislav Hagara | Komentářů: 8
    6.11. 22:33 | Nová verze

    Open source platforma Home Assistant (Demo, GitHub, Wikipedie) pro monitorování a řízení inteligentní domácnosti byla vydána ve verzi 2024.11.

    Ladislav Hagara | Komentářů: 0
    6.11. 22:11 | Nová verze

    Oficiálně byla vydána (Mastodon, 𝕏) první RC verze GIMPu 3.0. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.

    Ladislav Hagara | Komentářů: 18
    6.11. 17:22 | IT novinky

    Hodnota Bitcoinu, decentralizované kryptoměny překonala 75 000 dolarů (1 770 157 korun).

    Ladislav Hagara | Komentářů: 25
    6.11. 17:11 | Nová verze

    Byla vydána nová verze 8.11.0 řádkového nástroje a knihovny pro přenos dat po různých protokolech curl. S oficiální podporou WebSocket. Opravena byla bezpečnostní chyba CVE-2024-9681.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

    Dotaz: Mazání se soboru v Perlu

    11.11.2009 12:03 TAPSOFT
    Mazání se soboru v Perlu
    Přečteno: 437×
    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.