информационная безопасность
без паники и всерьез
 подробно о проекте
Сетевые кракеры и правда о деле ЛевинаВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Критическая уязвимость UEFI позволяет... 
 Японский хостинг попросил клиентов... 
 Компрометация eMudhra вынудила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
проще всего поправить ваш скрипт. если запостите - попробую... 02.02.06 19:18  Число просмотров: 2432
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> > если не нужно коррелировать данные между строчками,
> имее
> > тсмысл обрабатывать файл построчно.
> >
> > perl -n one_string_script.pl <bigCSVfile.txt
> помоему то что надо!
> подскажите, где можно найти примеры?
> можете написать как это работает?

проще всего поправить ваш скрипт. если запостите - попробую показать как.
а в общем и целом, ключик -n делает вот что:

1. считывает одну строчку со stdin
2. запускает скрипт, помещая считаную строку в $_
3. goto 1 until end_of_file
<programming>
[Perl] работа с большим текстовым файлом в perl 02.02.06 16:55  
Автор: streptokok Статус: Незарегистрированный пользователь
<"чистая" ссылка>
имеется csv файл 200 Мб - список продуктов для onlinte магазина.
нужно произвести с ним некоторые действия:
- скопировать один столбец в другой
- извлеч список категорий
- добавить новый столбец с новыми категориями

скрипт написан и работает с пробным файлом 315 Кб

с 200 Мб работать не может. после 84 Мб обработка прерывается...
если не нужно коррелировать данные между строчками, имее... 02.02.06 17:22  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> имеется csv файл 200 Мб - список продуктов для onlinte
> магазина.
> нужно произвести с ним некоторые действия:
> - скопировать один столбец в другой
> - извлеч список категорий
> - добавить новый столбец с новыми категориями
>
> скрипт написан и работает с пробным файлом 315 Кб
>
> с 200 Мб работать не может. после 84 Мб обработка
> прерывается...

если не нужно коррелировать данные между строчками, имее тсмысл обрабатывать файл построчно.

perl -n one_string_script.pl <bigCSVfile.txt
помоему то что надо! 02.02.06 18:42  
Автор: streptokok Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> если не нужно коррелировать данные между строчками, имее
> тсмысл обрабатывать файл построчно.
>
> perl -n one_string_script.pl <bigCSVfile.txt
помоему то что надо!
подскажите, где можно найти примеры?
можете написать как это работает?
проще всего поправить ваш скрипт. если запостите - попробую... 02.02.06 19:18  
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
<"чистая" ссылка>
> > если не нужно коррелировать данные между строчками,
> имее
> > тсмысл обрабатывать файл построчно.
> >
> > perl -n one_string_script.pl <bigCSVfile.txt
> помоему то что надо!
> подскажите, где можно найти примеры?
> можете написать как это работает?

проще всего поправить ваш скрипт. если запостите - попробую показать как.
а в общем и целом, ключик -n делает вот что:

1. считывает одну строчку со stdin
2. запускает скрипт, помещая считаную строку в $_
3. goto 1 until end_of_file
понятно! спасибо :) 03.02.06 15:22  
Автор: streptokok Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> проще всего поправить ваш скрипт. если запостите - попробую
> показать как.
> ....
> а в общем и целом, ключик -n делает вот что:
>
> 1. считывает одну строчку со stdin
> 2. запускает скрипт, помещая считаную строку в $_
> 3. goto 1 until end_of_file

понятно! спасибо :)

следующий вопрос - можно ли сохранять переменные между итерациями?
иначе придется каждый раз считывать hash из файла... долговато

my $src ="src.csv", $cat="categorie.csv", $dist ="dist.csv";
my $line, $flag, $feld, $new, $old, $name;
my %categorie, %relation;

# ---- read categorie ----
open (CAT, "<$cat") or die $!;
while(<CAT>){
chomp;
($new,$old,$name)=split(/\;/);
$relation{$old}=$new;
}
close (CAT);
# ---- write new categorie ----
open (SRC, "<$src") or die $!;
open (DIST, ">>$dist") or die $!;
$flag=0;
while(<SRC>){
chomp;
split(/\;/);
if($flag==0){
$feld="\"NewCategorieNumber\"";
$flag=1;
}
else {
if(!$relation{$_[25]}) {
$feld="\"0\"";
}
else {
$feld=$relation{$_[25]};
}
}
$line = join("\;",@_);
$line = $line."\;$feld\n";
print DIST $line;
}
close (DIST);
close (SRC);
Re 03.02.06 23:26  
Автор: Heller <Heller> Статус: Elderman
<"чистая" ссылка>
> следующий вопрос - можно ли сохранять переменные между
> итерациями?
> иначе придется каждый раз считывать hash из файла...
> долговато

Насколько я знаю, в случае использования ключа -n сохранять переменные между "циклами" нельзя. Варианты решения проблемы:

1. Сохраняй их в промежуточном файле. Должно не особенно сильно нагрузить систему.
2. Используй не -n, а нормальный цикл. По сути заключаешь программу в такую конструкцию:

open (FH, "yourfile");
while (<FH>) {
код
}

Должно полуиться все то же самое, что и с ключем -n. Правда, как я понял из изначального поста, такое не прошло. Не совсем понятно почему - у меня на ActiveStat'овском Perl работает все отлично. Да и вообще следующие записи, насколько я знаю, эквивалентны (не считая возможных конфликтов с именем дескриптора):
perl -n script.pl file.txt
perl -e "open(FH,'file.txt');while(<FH>){require 'script.pl'}"
Ошибка видимо не в величине файла, а в чем-то другом. С большими файлами (более 4 Гб) я имел проблемы только с использованием функций seek, tell и операторов вида -X. Построчное считывание всегда работало нормально.

ЗЫ. Сырца твоего не смотрел, уж извини :)
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 1 s   Design: Vadim Derkach