🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#51759
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:37
21 lines
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
#51762
Author: Bartosz Feński aka fEnIo
Date: Wed, 13 Jan 2010 19:41
34 lines
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
#51766
Author: Adam Osuchowski
Date: Wed, 13 Jan 2010 19:42
13 lines
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
#51761
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:47
11 lines
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
#51760
Author: Mikołaj Karwat
Date: Wed, 13 Jan 2010 19:50
4 lines
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
#51765
Author: Szymon Sokół
Date: Wed, 13 Jan 2010 19:59
39 lines
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
#51764
Author: Szymon Sokół
Date: Wed, 13 Jan 2010 20:05
21 lines
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
#51763
Author: lrem
Date: Wed, 13 Jan 2010 20:18
16 lines
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