Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.118.126.11] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Доброго времени суток!
Вопрос в следующем. Есть строка вида: | 2| 458/2 | 07.06.2010 |900 | 5.087 | 565 | 2 | 565 |ААКА454АА|454564564 |абракадабра |ВЫАВАЫВАВВЫ | | Как видно, каждый столбец разделен символом |. Необходимо данные из каждого столбца каким-то образом вытащить и запись в каждый элемент массива. Как такое можно сделать? Заранее спасибо. |
Сообщ.
#2
,
|
|
|
http://perldoc.perl.org/functions/split.html
|
Сообщ.
#3
,
|
|
|
Эмм...
Примерно вот так: open( myFile , 'MyMegaFile' ); while( <myFile> ) { chomp; ( $field_1 , $field_2 , $field_3 , $field_4 , $field_5 , $field_N ) = split( /|/ ); } |
Сообщ.
#4
,
|
|
|
Прежде чем написать на форум, я пробовал использовать split.
split(/|/) не правильно делит строку. Он делит каждый символ, т.е. это выглядит примерно так. Есть строка | 2| 458/2 | 07.06.2010 |900 | 5.087 | 565 | 2 | 565 |ААКА454АА|454564564 |абракадабра |ВЫАВАЫВАВВЫ | | Он ее поделит как | 2 | и так далее, в том числе проблемы. |
Сообщ.
#5
,
|
|
|
split(/\|/)
|
Сообщ.
#6
,
|
|
|
Да, простите.
Как-то совсем забыл экран поставить. Добавлено Хотя с другой стороны, написал же: Цитата Примерно вот так |
Сообщ.
#7
,
|
|
|
Ребят, спасибо вам большое.
Еще один вопрос есть, к примеру есть строка "string" Как из данной строки удалить символы " (кавычки) |
Сообщ.
#8
,
|
|
|
$string=~s/["']//g; или $string=~s/^\s*"\s*//; $string=~s/\s*"\s*$//; |
Сообщ.
#9
,
|
|
|
2Vspeaker, в цикле применяю данный код к каждому элементу массива.
На выходе получаю мусор. К примеру. foreach $arg(@ar) { $arg = ~s/["']//g; } заведомо знаем, что например @ar[0] = "0.466" на выходе получаем @ar[0] = 18446744073709551615 Так для каждого элемента массива. Чему бы не было равно первоначальное значение элемента, после применения регулярного выражения всегда будет 18446744073709551615 В чем может быть проблема. |
Сообщ.
#10
,
|
|
|
Цитата requiroverus @ а зачем тут пробел между "=" и "~"? $arg = ~s это же совершенно разные операторы получаются |
Сообщ.
#11
,
|
|
|
И еще такой вопрос.
foreach $arg(@ar) { print OUTPUT "43002708\t01.03.2010\tF402\t$number1\t$number3\t$arg\t\$empty\$\n" if $number2 >= "2"; } Последняя строка которая будет выводится в цикле, будет такой(к примеру): 43002708 01.03.2010 ........... $empty$ Так как предыдущие выводятся в одну строку, т.е. 43002708 01.03.2010 ........... $empty$ В чем может быть проблема? Если смотреть в mc на все это дело, то видно что в последней строке в ее конце "43002708 01.03.2010 ..........." стоит знак "^" |
Сообщ.
#12
,
|
|
|
Ниче не понял.
В чем вопрос? |
Сообщ.
#13
,
|
|
|
2Nadz Goldman, в цикле формируются строки и выводятся на экран
foreach $arg(@ar) { print "one\ttwo\t$arg\n"; } Предположим что @ar состоит из двух элементов. @ar[0] = "1" @ar[1] = "2" Первая строка будет такого вида one two 1 Вторая строка будет вида one two 2 После two откуда-то берется перенос строки, понять не могу откуда. Если смотреть на это в линуксовом MC, видно символ ^, который и означает перенос строки. Избавление от этого есть какое-нибудь? |
Сообщ.
#14
,
|
|
|
Извините, но вот только что запустил сей скрипт:
#!/usr/bin/perl @ar[0] = "1"; @ar[1] = "2"; @ar[2] = "3"; @ar[3] = "4"; foreach $arg(@ar) { print "one\ttwo\t$arg\n"; } Вот вывод в консоль: one two 1 one two 2 one two 3 one two 4 Добавлено Цитата requiroverus @ Если смотреть на это в линуксовом MC, видно символ ^, который и означает перенос строки. Этот символ не означает перенос строки. Просто разность конца строки (UNIX/DOS) |
Сообщ.
#15
,
|
|
|
Ну тот, код который я привел, он самом деле выводит в консоль все так, как нужно.
Но в моем скрипте, в массиве хранятся строки, которые был вытащены из файла. Может в строках есть какие-то символы, по вине которых происходит перенос строки. Если это так, может можно как-то все экранировать? |