информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Страшный баг в WindowsВсе любят медАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
 Зловреды выбирают Lisp и Delphi 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
помоему то что надо! 02.02.06 18:42  Число просмотров: 2112
Автор: streptokok Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> если не нужно коррелировать данные между строчками, имее
> тсмысл обрабатывать файл построчно.
>
> perl -n one_string_script.pl <bigCSVfile.txt
помоему то что надо!
подскажите, где можно найти примеры?
можете написать как это работает?
<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




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach