Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
[Perl] Замена определенного по счету символа |

25.04.2010, 14:01
|
|
Познающий
Регистрация: 23.02.2009
Сообщений: 35
Провел на форуме: 267868
Репутация:
0
|
|
[Perl] Замена определенного по счету символа
Добрый день!
Как можно заменить в тексте определенный по счету символ?
Например, вот текст:
Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию.
Как заменить десятый по счету пробел на любой другой символ?
|
|
|

25.04.2010, 14:03
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
http://perldoc.perl.org/functions/substr.html
|
|
|

25.04.2010, 14:11
|
|
Познающий
Регистрация: 23.02.2009
Сообщений: 35
Провел на форуме: 267868
Репутация:
0
|
|
Я в том смысле, что неизвестно какой по счету символ в тексте этот десятый пробел.
|
|
|

25.04.2010, 15:12
|
|
Постоянный
Регистрация: 08.11.2008
Сообщений: 498
Провел на форуме: 2603363
Репутация:
278
|
|
PHP:
http://php.net/manual/en/function.substr-replace.php
|
|
|

25.04.2010, 18:12
|
|
Новичок
Регистрация: 05.08.2009
Сообщений: 4
Провел на форуме: 60249
Репутация:
5
|
|
Используй регулярные выражения, в твоем случае поиск n-го совпадения:
http://perl.find-info.ru/perl/015/search/1.htm
|
|
|

25.04.2010, 20:37
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
PHP код:
$a = 'qwertyuiopasdfghjklzxcvbnm';
print $a."\n";
print substr($a, 0, 9) . '!' . substr($a, 10, length($a));
если заранее знаешь какие символы заменять надо, заменяй регуляркой
|
|
|

25.04.2010, 21:37
|
|
Познающий
Регистрация: 17.01.2010
Сообщений: 33
Провел на форуме: 30813
Репутация:
33
|
|
>"Как заменить 10й пробел в строке?"
А то что-то вы странно не понимаете как обстоит вопрос
Я на низком уровне знаю перл, мб это как-то близко к делу
use warnings;
use strict;
my $a = 'A B C D E F G H I J K L M';
my $i = 7; # седьмой пробел
$a =~ s!(\s)!_a_($1, --$i)!eg;
print $a;
sub _a_{ $_[1] ? return $_[0] : return 'S' }
Последний раз редактировалось taxpayer; 25.04.2010 в 22:01..
|
|
|

25.04.2010, 21:58
|
|
Познающий
Регистрация: 13.04.2010
Сообщений: 42
Провел на форуме: 460968
Репутация:
81
|
|
PHP код:
#!/usr/bin/perl
$txt="dgas adg dgasdg asdg adsg a dga sdga sdg adsg asdg asgd";
@arr=split(" ",$txt);
if(scalar @arr > 10)
{
print join(' ',@arr[0..9]).'!'.join(' ',@arr[10..$#arr]);
}
else
{
print $txt;
}
вот так например. Только он почему то переносы строк убивает.
|
|
|

26.04.2010, 06:54
|
|
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме: 3660186
Репутация:
905
|
|
Код:
$str =~ s{(\s)}{++$count == 10 ? '[SPACE]' : $1;}ge;
?
|
|
|

26.04.2010, 15:13
|
|
Познающий
Регистрация: 17.01.2010
Сообщений: 33
Провел на форуме: 30813
Репутация:
33
|
|
krypt3r, не проще использовать декремент? зачем лишние сравнения?
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|