Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Читаю файл. В нем есть несколько строк, которые мне нужно сцепить в одну: Object: FCS_HQ Delay: 245 min Search directory: /data/processed/hq/ ну и далее описание других объектов Мне нужно каждый объект записать одной строкой: FCS_HQ|245 min|/data/processed/hq/| Блин, торможу, ничего не получается.. Пытаюсь вот так: my $str1 = ""; my $str2 = ""; # начинаю читать массив foreach(@msg_arr){ # ищу вхождение строки Object:, записываю значение в переменную $str1 = substr @msg_arr[0],0,10,; if ( $str1 eq " Object:") { $str2 = (substr @msg_arr[0],29).'|'; } # ищу вхождение строки Delay:, ДОБАВЛЯЮ ее значение в переменную $str1 = substr @msg_arr[0],0,9; f ( $str1 eq " Delay:") { $str2 = $str2.(substr @msg_arr[0],29).'|'; } # добавляю третью и в хвост дописываю ||| - это сигнал для меня что описание объекта кончилось $str1 = substr @msg_arr[0],0,20; if ( $str1 eq " Search directory:") { $str2 = $str2.(substr @msg_arr[0],29).'|||'; } # ловлю этот сигнал и пытаюсь напечатать описание объекта одной строкой if (substr $str2,-3 eq "|||") { print "$str2\n"; $str2 = ""; # очищаю, чтобы до тех пор, пока не встречу следующий объект ничего не печатать } нифига! print "$str2\n"; - печатается несколько строк. ну т.е. FCS_HQ| 245 min| /data/processed/hq/||| Где я обул лыжи???? PS: я на перле только только начал. Нужно переделать чужие программы, мучаюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 13:21 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Это конечно адъ, а не код на Perl... ну да ладно. Возможно, перед конкотенацией нужно отрезать переводы строк chomp()... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:00 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Barsik72Читаю файл. файл открыть на чтение: Код: php 1. Barsik72В нем есть несколько строк построчное чтение: Код: php 1. 2. 3. 4. Barsik72которые мне нужно сцепить в одну: чтобы сцепить, для начала надо расщепить; символ-разделитель : Код: php 1. Barsik72которые мне нужно сцепить в одну: символ-соединитель: | Код: php 1. теперь всё вместе: Код: php 1. 2. 3. 4. 5. 6. теперь оптимизация: если не указать переменную для построчного чтения, while будет читать в глобальную переменную $_ и её же будет расщеплять split(), если явно не указана другая. переменная-массив @parts тоже не нужна, сразу подставляем результат split в join() Код: php 1. 2. 3. из-за одной строчки в теле цикла глупо держать трёхстрочный while, поэтому заменим while с фигурными скобками на постфиксную однострочную форму без скобок; да и круглые скобки всюду можно убрать, Pеrl сам разберётся Код: php 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:15 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
S_Andrey_A, Код конечно АДЪ, я в синтаксис еще никак не въеду (до этого писал на С, Яве, да PL/SQL). Тут какая-то фигня непонятная. Я для эксперименту добавил явно объявленную переменную: Для первого прохода $str3 = '1'; для второго $str3 = $str3.'2'; для третьего соответственно $str3 = $str3.'3'; Вывод получил такой: STF_HQ| 1 35 min| 2 /data/processed/nf/||| 3 ну и так далее... ВООБЩЕ НИЧЕГО НЕ ПОНИМАЮ!!! Печать происходит вот такой конструкцией (реагирую на ||| - пора печатать) if (substr $str2,-3 eq "|||") { print "$str2\n"; print "$str3\n"; $str2 = ""; $str3 = ""; } ОНО ЧЕГО ПЕРЕМЕШИВАЕТСЯ-ТО ???? Да, забыл указать: на вход процедуры прилетает переменная, в которой одна длинющщая строка. Эту переменную автор преобразовывает в массив my @msg_arr = split(/\n/, $msg); Ну и далее foreach(@msg_arr){ Если его печатать print(@msg_arr[0]); как раз и получаются многострочные описания объектов. Строки идут по порядку, сначала имя объекта, потом его свойства. Может тут собака какая... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:21 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
volodin661, спасибо! Я неправильно сказал, прошу прощения. Я повнимательней порылся в коде, в эту функцию, которую мне нужно поправить, прилетает простая переменная, $msg_arg. Эту переменную автор преобразовывает в массив my @msg_arr = split(/\n/, $msg); Ну и далее foreach(@msg_arr){ идет обработка } Если его печатать print(@msg_arr[0]); как раз и получаются многострочные описания объектов. Строки идут по порядку, сначала имя объекта, потом его свойства. Мне нужно этот цикл переделать так, чтобы перехватывать названия объектов и их атрибуты, ну и выводить "один объект - одна строка". В этом случае тоже надо расцеплять-сцеплять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:33 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Говорю же попробуй chomp() Код: ruby 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 15:35 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
sorry, был пьян, просили же разделённый на три строки об'ект сцепить в одну строку, а я-то ... Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 16:13 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
опечатки ... но я пьян, вы же помните, да? my @attributes = ( 'Object', 'Delay', 'Search directory' ); my %x=(); while ( my $line = <F> ) { my ($key, $val) = split ':', $line; next if not $key; $x{$key} = $val; if ( grep ( defined($x{$_}), @attributes) == 3 ) { print join '|', map $x{$_}, @attributes; %x = (); } } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 16:18 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Код: perl 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.12.2015, 16:20 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
volodin661, Ругается... Чего ему надо? Scalar found where operator expected at /home/usnmp/scripts/sdi/bin/sdi_env.pm line 179, near "':' $str1" (Missing operator before $str1?) 179 строка это вот: my ($key, $val) = split ':' $str1; Код такой: my @msg_arr = split(/\n/, $msg); my $str1 = ""; my @attributes = ( 'Object', 'Delay', 'Search directory' ); my %x=(); foreach(@msg_arr){ my $tmp = $_; #print $tmp; # Print to standart output $str1 = @msg_arr[0]; my ($key, $val) = split ':' $str1; next if not $key; $x{$key} = $val; if ( grep ( defined($x{$_}), @attributes) == 3 ) { if ( grep ( defined($x{$_})), @attributes) == 3 ) { print join '|', map $x{$_}, @attributes; %x = (); } } прошу обратить внимание: я не читаю файл в этой процедуре, мне приходит строка, которую превращают в массив @msg_arr. И если его нулевые элементы печатать в цикле, получим файл, где объекты распечатаны многострочно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 09:48 |
|
||
|
Только не смейтесь. Как сцепить строки? Туплю.
|
|||
|---|---|---|---|
|
#18+
Сорри, запятую не заметил. Теперь не ругается, но и ничего не выдает. Наверное, дело в $_ Что нужно указать явно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.12.2015, 09:51 |
|
||
|
|

start [/forum/topic.php?fid=23&msg=39125029&tid=1461345]: |
0ms |
get settings: |
9ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 431ms |

| 0 / 0 |
