Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив = содержимое файла. Почему не работает? 
:(
    Опции темы
PyccHeBa
Дата 30.11.2007, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



Почем он читает только первую строку? Мне надо в массив загнать все строки.

#!/usr/bin/perl

# Include library files.
# Library file for parsing excel files.
# use Spreadsheet::ParseExcel;
# Library file for working with databases.
# use DBI;

$filename = "mnogostrok.txt";

    open (F1, $filename) || die ("Could not open $filename");
    @data = <F1>;
    foreach my $i (@data) {
    print "$i\n";
}
PM MAIL   Вверх
KSURi
Дата 30.11.2007, 06:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



У меня ваш код работает.

Попробуйте еще так на всякий случай:
Код

...
local $/ = undef;
my $data = <F1>;
print $data;



--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 30.11.2007, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



проверьте так smile

Код
#!/usr/bin/perl
use strict;
use warnings;

my $filename = "mnogostrok.txt";
open my $flh, '<', $filename or die "Couldn't open $filename: $!";
my @data = <$flh>;
close $flh;

print join("", @data);


Это сообщение отредактировал(а) nitr - 30.11.2007, 10:59


--------------------
PM   Вверх
KSURi
Дата 30.11.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



nitr, а в чем разница использования SCALAR вместо GLOB в данном случае?
Только сейчас об этом задумался...


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
nitr
Дата 30.11.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



Ну как ответить, чтобы не запутать... Я отдаю предпочтение перлу выбирать.
Это допускается с версии 5.6, этот метод называется autovivifies, получаем косвенный файловый манипулятор/(создается анонимный тип-глоб и сохраняется ссылка на него), к примеру, очень удобно с ним работать к примеру в функциях, не надо думать какой манипулятор заюзать (имя), всё автоматически.

Подробнее:
1) perldoc perlfunc open,
2) Книга: "Perl: Сборник рецептов 2-е издание" параграф 7.5 smile

Это сообщение отредактировал(а) nitr - 30.11.2007, 21:06


--------------------
PM   Вверх
PyccHeBa
Дата 1.12.2007, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.10.2007

Репутация: нет
Всего: нет



Вот в чем дело. Он открывает все строки, но задает их все сразу в один элемент массива. А мне нужно чтобы массив собрал строки в разные элементы
PM MAIL   Вверх
nitr
Дата 1.12.2007, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



PyccHeBa, чего-чего?

Добавлено через 26 секунд
Покажите "на пальцах", я не понял вашей мысли...


--------------------
PM   Вверх
KSURi
Дата 2.12.2007, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 887
Регистрация: 8.6.2006
Где: Russia

Репутация: 20
Всего: 27



nitr, спасибо за интересную информацию. Разберусь на досуге.


--------------------
Died at Life.pl line 21
PM Jabber   Вверх
amg
Дата 3.12.2007, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



Цитата(PyccHeBa @ 1.12.2007,  00:43)
Вот в чем дело. Он открывает все строки, но задает их все сразу в один элемент массива.

Такое случится только в том случае, если где-то выше была переопределена переменная $/ (INPUT RECORDS SEPARATOR) с умолчаемого значения "\n" на undef (не обязательно, чтобы этой переменной был присвоен undef в явном виде, достаточно local $/; в той же области видимости). 

См. пост KSURi, в котром упоминается $/: если там заменить скалярную переменную на массив, то все содержимое файла будет в первом элементе этого массива.

Это сообщение отредактировал(а) amg - 3.12.2007, 07:35
PM MAIL   Вверх
nitr
Дата 3.12.2007, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 37
Всего: 84



PyccHeBa, можно было не собирать со всех ответов, а взять только один, и просто проверить, к примеру, мой ответ не должен содержать эти ошибки, да и другие тоже smile т.к. скрипт изначально прост...


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1211 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.