Автор Тема: пробелы & push  (Прочитано 4598 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
пробелы & push
« : 06 Сентября 2003, 01:08:59 »
приветствую всех :)
вопрос в том, что при использовании push, он перед строчками (всех кроме 1 (в Перле "0")) ставит пробел.
как этого избавиться?
и примерчик:

open (FILE, "file");
@file=;
close (FILE);
for ($str=0;$str<=@file;$str++) {
if ($str eq "2") { push @copyfile,"ok\\n"; }
else { push @copyfile,@file[$str]; } }
open (CFILE, ">copyfile");
print CFILE "@copyfile";
close (CFILE);
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
пробелы & push
« Ответ #1 : 06 Сентября 2003, 09:42:06 »
И не только push...
Самый простой вариант:
foreach (@copyfile) {
 $_ =~s /^\\s//;
}

Оффлайн Alone

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 182
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
пробелы & push
« Ответ #2 : 06 Сентября 2003, 12:05:53 »
:D

print CFILE "@copyfile";
замени на
print CFILE @copyfile;

Оффлайн norden

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
пробелы & push
« Ответ #3 : 06 Сентября 2003, 12:49:57 »
Кстати, вот это неправильно:

$str<=@file

ты не можешь сравнивать скаляр с массивом, я вообще удивляюсь как это у тебя работает (?). Надо так:

$str<=$#file

и по поводу пробелов. Я бы делал просто так:

@copyfile = (@file[$str], @copyfile);

и никаких пробелов нигде.
life /?

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
пробелы & push
« Ответ #4 : 06 Сентября 2003, 12:56:23 »
norden
Пучему же, при приравнивании скаляра к массиву, массив возвращает количество записей массива, единственно зачем использовать "<=" если счет начинается с нуля, цикл будет проходить на один раз больше. Значения массива @file[max] не существует в данном цикле, конечное значение будет @file[max - 1]

А пробелы вставляются действительно как сказал Alone при записи файла, я немного перепутал с выборкой массива из textarea

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
пробелы & push
« Ответ #5 : 07 Сентября 2003, 15:04:42 »
Пробелы - это не ошибка оператора push, это особенность print,  который в случае, если массив указан в кавычках, выводит его содержимое, разделяя его содержимым переменной $" (пробел по умолчанию):

@a = (1..5);
print "@a";
$"="\\n";
print "@a"
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
пробелы & push
« Ответ #6 : 07 Сентября 2003, 21:28:18 »
Цитировать
Alone:
print CFILE "@copyfile";
замени на
print CFILE @copyfile

спасибочки, так правда и не понял что произошло, но все равно работает.
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
пробелы & push
« Ответ #7 : 07 Сентября 2003, 21:31:56 »
Цитировать
norden:
Кстати, вот это неправильно:
$str<=@file

правильно, я по книге Шварца пишу. :)
Цитировать
norden:
ты не можешь сравнивать скаляр с массивом, я вообще удивляюсь как это у тебя работает (?). Надо так:
$str<=$#file

что это?
Цитировать
norden:
и по поводу пробелов. Я бы делал просто так:
@copyfile = (@file[$str], @copyfile);

ну.... как умею так и делаю. Вот лучше бы обьяснил ,например, чем твой метод лучше :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
пробелы & push
« Ответ #8 : 07 Сентября 2003, 21:34:14 »
Цитировать
Phoinix:
Пучему же, при приравнивании скаляра к массиву, массив возвращает количество записей массива, единственно зачем использовать "<=" если счет начинается с нуля, цикл будет проходить на один раз больше. Значения массива @file[max] не существует в данном цикле, конечное значение будет @file[max - 1]

это все практика
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
пробелы & push
« Ответ #9 : 07 Сентября 2003, 23:45:34 »
Цитировать
mike:
@a = (1..5);
print "@a";
$"="\\n";
print "@a"

поучительно, только не понятно что делает $"="\\n"; ?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
пробелы & push
« Ответ #10 : 07 Сентября 2003, 23:59:00 »
Цитировать
Yaroslav:
поучительно, только не понятно что делает $"="\\n"; ?

Я ж вроде написал :) $" - это переменная, в которой содержится разделитель, используемый print при выводе массива в строку.
Иначе говоря,
$" = "\\n";
print "@array";
аналогичен
print join "\\n", @array;
[ основной браузер когда-то был, теперь попробуй разберись =]

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28