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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> How to sent file ! 
:(
    Опции темы
viktorijakup
Дата 5.9.2008, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Hello !!!

This script runs perfectly,
but in this script i must direct path. I would like run script in all
directoties and don't rewrite path in script every time.

I have a lof of files in different directories:
Examples:
D:\conv\ESSD\YJCIS\YJCIS14136\TOC.doc;
D:\conv\ESNL\APNUM\APNUM2185\vvvv.pdf;
D:\conv\ESME\BULSCI\BULSCI2303\rrr.tex...
.........and so on....
Constant path is "D:\conv", doesn't change
%%%%
For example:
I must send from
D:\conv\ESSD\YJCIS\YJCIS14136\

selective "TOC.doc" file to

X:\sgml_db\ESSD\YJCIS\YJCIS14136\

Constant path is "X:\sgml_db", doesn't change, the same "\ESSD\YJCIS\YJCIS14136\" catalogue name.

and rename "TOC.doc" to "MMC1.doc";
if i have "vvvv.pdf" I rename "MMC1.pdf" and so on.....

My script must undestand "paths", I want sent file from
directory to the same directory, only change "D:\conv\" to "X:\sgml_db\" path.

What i must add to this script !!???

        
Код

 use strict;
         use warnings;
         use File::Copy;
         use File::Path;
          
   
      my $sDest = 'X:/sgml_db/ESSD/YJCIS/YJCIS14136/';
      mkpath ($sDest, {verbose =>1});
      copy('D:/conv/ESSD/YJCIS/YJCIS14136/bbb.doc', qq{$sDest/MMC1.doc}) or die "Could not copy: $!";




Thank you !

Viki
PM MAIL   Вверх
shamber
Дата 5.9.2008, 14:50 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Add this two file in one directory. Change $oldDir  and $newDir


test.pl

Код

use strict;

use DirScanRecurce;
         use warnings;
         use File::Copy;
         use File::Path;
         
my $oldDir = 'D:/conv'; #from here we will copy all filein all directory
my $newDir = 'X:/sgml_db'; # all file will be here

my $DirScanRecurce = DirScanRecurce -> new($oldDir);
my $hash;
while (my $file = $DirScanRecurce-> get_file()) {
    $file =~ /(.*)\/(.*)(\..*)$/;
    my $type =$3;  # type  file .zip .pdf etc
    my $cat = $1; # catalog
    $cat =~ s/$oldDir//; # delete const path
    
    $hash->{$type}++; #add index for file by type
    mkpath ($newDir.$cat, {verbose =>1}); #create directory
    copy($file, $newDir.$cat."/MMC".$hash->{$type}.$type) or die "Could not copy: $!"; # copy file
}



DirScanRecurce.pm
Код

package DirScanRecurce;
use strict;
use warnings;
sub new {
    my $class = shift;
    my %args; $args{workdir} = shift;
    
    return "workdir undefined\n" unless (exists $args{workdir});
    my $dh;
    opendir ($dh, $args{workdir}) or die "Can't open $args{workdir}: $!";
    my $self = [ [$dh, $args{workdir}] ];
    return bless $self, $class;
}
sub get_file {
    my $self = shift;
    return unless (@$self);
    my $return_filename;
    DH: while ( my $dh_arr = pop(@$self) ) {
        while (my $filename = readdir($dh_arr->[0])) {
            next if ($filename eq '.' or $filename eq '..');
            my $full_name = $dh_arr->[1].'/'.$filename;
            $full_name =~ s/(\/\/)+/\//g;
            if (-d $full_name) {
                push(@$self, $dh_arr);
                my $dh;
                #opendir ($dh, $full_name) or die "Can't open $full_name: $!";
                last DH unless (opendir ($dh, $full_name));
                $dh_arr = [$dh, $full_name];
            }
            else {
                $return_filename = $full_name;
                push(@$self, $dh_arr);
                last DH;
            }
        }
        closedir($dh_arr->[0]) if (@$self);
    }
    return $return_filename; 
}
sub DESTROY {
    my $self = shift;
    while(my $dh_arr = shift @$self){
         closedir($dh_arr->[0]) if $dh_arr->[0];
     };
}
}
1;



And Try

$newDir.$cat."/MMC".$hash->{$type}.$type this name of new file.


Это сообщение отредактировал(а) shamber - 5.9.2008, 14:56
PM MAIL Jabber   Вверх
viktorijakup
Дата 5.9.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Hello !!!

You are nice, you are genius !!!!

You script runs more good, than I expect !!!

But I need to send one file in one script run.

If I open folder: "D:\conv\yjcis\yjcis14136\"  and selective one file "bbc.doc", 

this script must sent this file to X:\sgml_db\yjcis\yjcis14136\ and rename to MMC1.doc. The same path in "red color".

And When I choose other directory from "D:\conv\ESNL\PLA\PLA18045\" and selective file "supporting.pdf",

this script must sent this file to X:\sgml_db\ESNL\PLA\PLA18045\ and rename to MMC1.pdf.










PM MAIL   Вверх
sir_nuf_nuf
Дата 6.9.2008, 23:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



viktorijakup, how do you plan to run you script ?
from any directory or only from directory containing file to be copied?
In other words: is directory "D:\conv\yjcis\yjcis14136\" current when you execute script?

if so, you may use following script:
Код

#!/usr/bin/perl
use warnings;
use strict;

use Cwd;
use File::Path;
use File::Copy;
use File::Spec::Functions;

#hardcoded 
my $FP = 'D:\conv';
my $TP = 'X:\sgml_db';
my $NAME = 'MMC1';

my ($from_file, $to_file) = ($ARGV[0], $ARGV[0]);
my ($from_dir, $to_dir) = (cwd, cwd);

#rename file part
$to_file =~ s/.*\.(.+)/$NAME.$1/;

#rename dir part
$to_dir =~ s/^\Q$FP\E/$TP/;

mkpath($to_dir);

copy(catfile($from_dir, $from_file), catfile($to_dir, $to_file)) 
    or die "can't copy file";

exit 0;

#!/usr/bin/perl
use warnings;
use strict;

use Cwd;
use File::Path;
use File::Copy;
use File::Spec::Functions;

#hardcoded 
my $FP = 'D:\conv';
my $TP = 'X:\sgml_db';
my $NAME = 'MMC1';

my ($from_file, $to_file) = ($ARGV[0], $ARGV[0]);
my ($from_dir, $to_dir) = (cwd, cwd);

#rename file part
$to_file =~ s/.*\.(.+)/$NAME.$1/;

#rename dir part
$to_dir =~ s/^\Q$FP\E/$TP/;

mkpath($to_dir);

copy(catfile($from_dir, $from_file), catfile($to_dir, $to_file)) 
    or die "can't copy file";

exit 0;


BTW, why did you chose this forum? there are a lot of english perl forums but you chose russian =)


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
shamber
Дата 8.9.2008, 09:13 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



 smile sir_nuf_nuf,  smile 
PM MAIL Jabber   Вверх
viktorijakup
Дата 8.9.2008, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Hi, sir_nuf_nuf !

Thank you for answer.

When I run your script, I get error:
    [1] Perl lib version (v5.6.1) doesn't mathch executable version (v5.8.8) at d:\bin\perl\lib/Config.pm line 21.
    [2] Compilation failed in require at d:\bin\perl\lib/DynaLoader.pm line 25.
    [3] Begin failed -- compilation aborted at d:\bin\perl\lib/DynaLoader.pm.
    [4] Compilation failed in require at d:\bin\perl\site\lib/Win32.pm line 13.
    [5] Begin failed -- compilation aborted at d:\bin\perl\site\lib/Win32.pm line 42.
    [6] Compilation failed in require at d:\bin\perl\lib/cwd.pm line 345.
    [7] Begin failed -- compilation aborted.

 smile 
PM MAIL   Вверх
shamber
Дата 8.9.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(viktorijakup @  5.9.2008,  16:50 Найти цитируемый пост)
If I open folder: "D:\conv\yjcis\yjcis14136\"  and selective one file "bbc.doc", 

Please answer, how you want selective file?
You will create gui?
PM MAIL Jabber   Вверх
viktorijakup
Дата 8.9.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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





 Hi, shamber !!!

Nice to see you !!!


]Correction :  I open folder and stand on file. 
    [1] I choose file myself.
    [2] Sent file.


For it, i must have script.....!!!!


PM MAIL   Вверх
sir_nuf_nuf
Дата 8.9.2008, 14:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(viktorijakup @  8.9.2008,  12:43 Найти цитируемый пост)
[1] Perl lib version (v5.6.1) doesn't mathch executable version (v5.8.8) at d:\bin\perl\lib/Config.pm line 21.
[2] Compilation failed in require at d:\bin\perl\lib/DynaLoader.pm line 25.


It seems you have incompatible versions of your perl libraries..

I know two solutions:
1) Update your perl to 5.8.8 (you can download it from active state site)
2) Do not use  Cwd module. Patch my script and substitute

Код

my ($from_dir, $to_dir) = (cwd, cwd);


with
Код

my $cwd = `cd`;
chomp $cwd;
my ($from_dir, $to_dir) = ($cwd, $cwd) ;




Это сообщение отредактировал(а) sir_nuf_nuf - 9.9.2008, 10:50


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
viktorijakup
Дата 9.9.2008, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Hi, sir_nuf_nuf !!!

Your scripts runs perfectly !!!!  smile 

Thank you very much !!!  smile  

Have a nice day !!!!

Viki.

 smile  
PM MAIL   Вверх
viktorijakup
Дата 16.9.2008, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Hi !!!

I have problem... smile 

When my file name with "interval", for example: PLB2 5284.tex, 
script doesn't work.

 smile 
PM MAIL   Вверх
sir_nuf_nuf
Дата 16.9.2008, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



viktorijakup
let me guess...
you call script in this manner:
Код

script.pl  file with spaces.txt

No wonder, script will try to copy 3 files..

try this:
Код

script.pl 'file with spaces.txt'


am i right ? smile 


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
viktorijakup
Дата 18.9.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Hi sir_nuf_nuf !!!

Your script work perfectly and with file name with "interval", 
but when I run script from "Main meniu" I get mistake.

You could it view in picture:


user posted image

This script I include in *.bat  place.

Код

@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!/usr/bin/perl
use warnings;
use strict;
use File::Path;
use Cwd;
use File::Copy;
use File::Spec::Functions;
#hardcoded 
my $FP = 'D:\conv';
my $TP = 'X:\sgml_db';
my $NAME = 'MMC1';
my ($from_file, $to_file) = ($ARGV[0], $ARGV[0]);
my $cwd = `cd`;
chomp $cwd;
my ($from_dir, $to_dir) = ($cwd, $cwd);
#rename file part
$to_file =~ s/.*\.(.+)/$NAME.$1/;
#rename dir part
$to_dir =~ s/^\Q$FP\E/$TP/;
mkpath($to_dir);
copy(catfile($from_dir, $from_file), catfile($to_dir, $to_file)) 
    or die "can't copy file";
exit 0;

__END__
:endofperl


PM MAIL   Вверх
sir_nuf_nuf
Дата 18.9.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



It's not a problem of script. It's a problem of FAR.

Это сообщение отредактировал(а) sir_nuf_nuf - 18.9.2008, 15:28


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


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

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


 




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


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

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