Thread View: pl.comp.lang.perl
8 messages
8 total messages
Started by Mikołaj Karwat
Wed, 13 Jan 2010 19:37
Pisanie po stringu w określonym miejscu
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:37
Date: Wed, 13 Jan 2010 19:37
21 lines
1737 bytes
1737 bytes
Witam Wszystkich,
Jak w perlu zmodyfikować string na określonej pozycji?
Chodzi o uzyskanie takiego efektu:
char str[SOME_CONST] = {0};
char some_str = "some string";
int some_pos = get_some_pos();
memcpy(&str[some_pos], some_str, strlen(some_str));
Czyli żeby wpisać jeden string w drugi od określonego miejsca,
nadpisując to co tam jest.
Szukam od paru godzin i nic nie mogę znaleźć ani wymiślić sensownego,
będę wdzięczny za pomoc.
pozdrawiam,
Mikołaj Karwat
Re: Pisanie po stringu w określonym miejscu
Author: Bartosz Feński aka fEnIo
Date: Wed, 13 Jan 2010 19:41
Date: Wed, 13 Jan 2010 19:41
34 lines
1933 bytes
1933 bytes
W artykule Mikołaj Karwat napisał(a):
> Jak w perlu zmodyfikować string na określonej pozycji?
>
> Chodzi o uzyskanie takiego efektu:
>
>
> char str[SOME_CONST] = {0};
> char some_str = "some string";
> int some_pos = get_some_pos();
>
> memcpy(&str[some_pos], some_str, strlen(some_str));
>
>
> Czyli żeby wpisać jeden string w drugi od określonego miejsca,
> nadpisując to co tam jest.
> Szukam od paru godzin i nic nie mogę znaleźć ani wymiślić sensownego,
> będę wdzięczny za pomoc.
Byś chociaż nie kłamał, że szukałeś.
Takie przykłady to ja znajduję nawet niechcący jak szukam czegoś zupełnie
innego ;P
Pokaż co już skleciłeś i co nie działa.
pozdr,
fEnIo
--
,''`. Bartosz Fenski | mailto:fenio@debian.org | pgp:0x13fefc40 | irc:fEnIo
: :' : 32-050 Skawina - Glowackiego 3/15 - malopolskie v. - Poland
`. `' phone:+48602383548 | proud Debian maintainer and user
`- http://fenski.pl | xmpp:fenio@jabber.org | rlu:172001
Re: Pisanie po stringu w określonym miejscu
Author: Adam Osuchowski
Date: Wed, 13 Jan 2010 19:42
Date: Wed, 13 Jan 2010 19:42
13 lines
1201 bytes
1201 bytes
Mikołaj Karwat wrote:
> Jak w perlu zmodyfikować string na określonej pozycji?
>
> Chodzi o uzyskanie takiego efektu:
>
>
> char str[SOME_CONST] = {0};
> char some_str = "some string";
> int some_pos = get_some_pos();
>
> memcpy(&str[some_pos], some_str, strlen(some_str));
substr($str, $some_pos, length($some_str), $some_str);
Re: Pisanie po stringu w określonym miejscu
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:47
Date: Wed, 13 Jan 2010 19:47
11 lines
1674 bytes
1674 bytes
> Pokaż co już skleciłeś i co nie działa.
Nie działa więc nie ma się czym chwalić (i kasowałem na bieżąco). Ale
jak już mam być perfidnym kłamcą to na przykład:
my @output;
push(@output," ");
@output[$datepos] = $date;
kombinowałem też trochę z PACKiem (np. print pack ("s@$datepos A*\n",
$date);)
Re: Pisanie po stringu w określonym miejscu
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:50
Date: Wed, 13 Jan 2010 19:50
4 lines
1390 bytes
1390 bytes
> substr($str, $some_pos, length($some_str), $some_str); Tak. Właśnie o to chodzi. Dziękuję!
Re: Pisanie po stringu w określonym miejscu
Author: Szymon Sokół
Date: Wed, 13 Jan 2010 19:59
Date: Wed, 13 Jan 2010 19:59
39 lines
2581 bytes
2581 bytes
On Wed, 13 Jan 2010 11:37:47 -0800 (PST), Mikołaj Karwat wrote:
> Witam Wszystkich,
>
> Jak w perlu zmodyfikować string na określonej pozycji?
Albo używasz odpowiedniego regexpa, np. tak:
my $str = "ra";
my $str_len = length($str);
my $some_str = "Mikołaj Karwat";
my $some_pos = index($some_str, "ar");
$some_str =~ s/(.{$some_pos}).{$str_len}/$1$str/;
albo - zazwyczaj tak będzie szybciej i prościej - funkcji substr:
my $str = "ra";
my $some_str = "Mikołaj Karwat";
my $some_pos = index($some_str, "ar");
substr($some_str, index($some_str, "ar"), length($str), $str);
Warto jednak zauważyć, że jeśli chcesz zamienić np. "ar" na "ra", tak jak w
tym przypadku, to zamiast szukać miejsca, gdzie zastępowany string występuje
i następnie podmieniać substring, lepiej zrobić to bezpośrednio:
my $str = "ra";
my $some_str = "Mikołaj Karwat";
$some_str =~ s/ar/ra/;
Perl ma po prostu dość znacząco odmienną filozofię niż C, zwłaszcza w
zakresie przetwarzania napisów i tablic, więc przepisywanie żywcem w Perlu
algorytmu zapisanego w C owocuje zazwyczaj programem nieczytelnym i
nieefektywnym.
--
Szymon Sokół (SS316-RIPE) -- Network Manager B
Computer Center, AGH - University of Science and Technology, Cracow, Poland O
http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F
Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Pisanie po stringu w określonym miejscu
Author: Szymon Sokół
Date: Wed, 13 Jan 2010 20:05
Date: Wed, 13 Jan 2010 20:05
21 lines
2147 bytes
2147 bytes
On Wed, 13 Jan 2010 11:47:48 -0800 (PST), Mikołaj Karwat wrote: >> Pokaż co już skleciłeś i co nie działa. > > Nie działa więc nie ma się czym chwalić (i kasowałem na bieżąco). Ale > jak już mam być perfidnym kłamcą to na przykład: > > my @output; > push(@output," "); > @output[$datepos] = $date; Ano właśnie, widzisz... patrz mój poprzedni posting: wykazałeś się zasadniczym niezrozumieniem konceptów perlowych. W Perlu string *nie jest* tablicą znaków, jak w C, więc ani push, ani [] nie będą przydatne przy modyfikacji stringów. -- Szymon Sokół (SS316-RIPE) -- Network Manager B Computer Center, AGH - University of Science and Technology, Cracow, Poland O http://home.agh.edu.pl/szymon/ PGP key id: RSA: 0x2ABE016B, DSS: 0xF9289982 F Free speech includes the right not to listen, if not interested -- Heinlein H
Re: Pisanie po stringu w określonym miejscu
Author: lrem
Date: Wed, 13 Jan 2010 20:18
Date: Wed, 13 Jan 2010 20:18
16 lines
1396 bytes
1396 bytes
W poście <1kc5y96ntukix$.dlg@falcon.sloth.hell.pl>,
Szymon Sokół nabazgrał:
>> Jak w perlu zmodyfikować string na określonej pozycji?
>
> Albo używasz odpowiedniego regexpa, np. tak:
>
> my $some_pos = index($some_str, "ar");
> $some_str =~ s/(.{$some_pos}).{$str_len}/$1$str/;
A myślałem że nic mi już dzisiaj humoru nie poprawi :D
--
Ostatnio na http://blog.lrem.net/ wymajaczyłem:
Google idzie na wojnę
Aż się chce iść na mszę
Ręce opadają
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads