The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"как загрузить текстовый файл в двумерный массив?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 03-Фев-04, 13:38  (MSK)
имеется текстовый файл с полями, разделенными табуляциями и/или пробелами. количество полей во всех строках строго одинаковое, но к их количеству привязываться нельзя.

подскажите, как лучше загрузить такой файл в двумерный массив в Перле?
пока приходится использовать вот такую корявую конструкцию:
open($fcq,$cq);
while(<$fcq>)
{
  chomp;
  @p=split;
  $j=0;
  foreach (@p)
  {
    $t[$i][$j++]=$_;
  }
  $i++;
}
close($fcq);

а еще лучше бы загрузить в хэш, чтобы первое поле было индексом в хэше, а остальные элементами массива, привязанного именного к этому имени.
т.е. обращение к конкретному полю происходило бы примерно так:
$massiv{"vasya"}[1]=100;

заранее большое спасибо!

PS. буду очень благодарен, если еще дадите ссылочку на внятное описание сложных структур данных в Перле, тех же двумерных массивов и т.п.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "как загрузить текстовый файл в двумерный массив?"
Сообщение от XMan Искать по авторуВ закладки on 03-Фев-04, 17:01  (MSK)
Хеш, говоришь...

while(<$fcq>) {
  @{$hash{$i++}}=split;
};

?

> PS. буду очень благодарен, если еще дадите ссылочку на внятное описание сложных структур данных в Перле, тех же двумерных массивов и т.п.

Вообще-то обычной ламы (O'Reily) хватает, чтобы понять, что в перле массивы могут быть хоть треугольными и содержать в себе всё, что угодно - от скаляров до структур, хешей и других массивов :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 03-Фев-04, 18:09  (MSK)
>Вообще-то обычной ламы (O'Reily) хватает, чтобы понять, что в перле массивы могут
>быть хоть треугольными и содержать в себе всё, что угодно -
>от скаляров до структур, хешей и других массивов :)

обычная лама у меня есть, сижу, штудирую... и не только ее...
но попалась мне там такая фраза: "Массив не становится элементом в списке, поскольку может содержать только скалярные значения, а не другие масивы."
вот эта фраза меня и смутила...

и конструкции @{...} я нигде не встречал... а в скаляр массив не засунешь...

Спасибо! буду дальше грызть :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 03-Фев-04, 19:40  (MSK)
и вот догрыз я до такого момента:
$i=0;
open($fcq,$cq);
while(<$fcq>)
{
  chomp;
  @{$t[$i++]}=split;
}
close($fcq);
foreach(@t)
{
print "@{$_}\n";
}
выдает весь массив построчно с полями, разделенными пробелами, а
$i=0;
open($fcq,$cq);
while(<$fcq>)
{
  @{$t[$i++]}=split(chomp);
}
close($fcq);
foreach(@t)
{
print "@{$_}\n";
}
с полями, разделенными табуляциями...

почему бы это? ведь вроде запись-то равнозначная, а результат разный...

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 03-Фев-04, 19:45  (MSK)
все оказалось еще хуже...
во втором случае оказалось, что строки из массива разбиты на элементы вообще произвольными кусками... даже не обязательно по разделительным символам...
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "как загрузить текстовый файл в двумерный массив?"
Сообщение от XMan Искать по авторуВ закладки on 04-Фев-04, 06:00  (MSK)
Ну ты ж подсунул split-у в качестве выражения по которому разбивать то, что вернула chomp ? Если внимательно почитать ман, то:

It returns the total number of characters removed from all its arguments.

Чего ж ты хотел... :)

PS. Теоретически, оно разбивает по разделителям "1". То есть, строка, вида:
asd11xcv312tg

превратится в массив:

'asd','','','xcv3','2tg'

Кавычки для наглядности.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 04-Фев-04, 09:47  (MSK)
да, похоже, что на самом деле по единицам разбивает...

а насчет chomp - я думал что запись chomp; в программе означает то же самое, что $_=comp($_); вот поэтому так лихо и засунул его внутрь split-а...

спасибо большое за помощь!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "как загрузить текстовый файл в двумерный массив?"
Сообщение от arto Искать по авторуВ закладки on 03-Фев-04, 21:09  (MSK)
>имеется текстовый файл с полями, разделенными табуляциями и/или пробелами. количество полей во
>всех строках строго одинаковое, но к их количеству привязываться нельзя.
>
>подскажите, как лучше загрузить такой файл в двумерный массив в Перле?
>пока приходится использовать вот такую корявую конструкцию:
>open(F,$cq);

while (<F>) {
  push @array,[ split ];
}

>close(F);
>
>а еще лучше бы загрузить в хэш, чтобы первое поле было индексом
>в хэше, а остальные элементами массива, привязанного именного к этому имени.

while (<F>) {
  my @ary = split;
  $hash{shift @ary} = \@ary;
}

>т.е. обращение к конкретному полю происходило бы примерно так:
>$massiv{"vasya"}[1]=100;
>
>заранее большое спасибо!
>
>PS. буду очень благодарен, если еще дадите ссылочку на внятное описание сложных
>структур данных в Перле, тех же двумерных массивов и т.п.

perldoc perldsc
perldoc perllol
perldoc perldata

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "как загрузить текстовый файл в двумерный массив?"
Сообщение от Michael emailИскать по авторуВ закладки on 04-Фев-04, 09:55  (MSK)
2 arto
Спасибо большое, конструкция [split] мне в голову бы не пришла :)

теперь у меня есть даже выбор в решениях :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру