2

TC_Circle1ディレクトリに 、TC_Circle2、 `TC_Point1 などの名前の XML ファイルがいくつかあり、スクリプトを使用して各ファイルの開始日と終了日を更新したいと考えています。開始日と終了日は、各ファイルのタグ内にあります。

Sun マシンを使用していたときに機能したスクリプトがありましたが、新しい HP Linux マシンでは機能しません。エラーは表示されず、日付も変更されません。Linux で動作させるには助けが必要です。スクリプト:

#!/usr/local/bin/perl
$numArgs = @ARGV;
if ($numArgs != 2) 
{
print "Usage: replace_default_date.pl DEFAULT_START_DATE DEFAULT_STOP_DATE\n";
}

@filenames = `ls TC*`;
chomp(@filenames);
foreach $file (@filenames)
{
  open(REGFILE, "$file") || die "Cannot open |$file|";
  @lines = <REGFILE>; 
  close(REGFILE);

  open(WRITEFILE), ">$file") || die "Cannot open |$file|";

  foreach $line (@lines)
  {
    if ($line =~ /DEFAULT_START_DATE/)
    {
      $newline = "  " . $ARGV[0];
      print WRITEFILE "$newline\n";
    }
    elsif ($line =~ /DEFAULT_STOP_DATE/)
    {
      $newline = "  " . $ARGV[1];
      print WRITEFILE "$newline\n";
    }
    else 
    {
      print WRITEFILE "$line\n";
    }
  }
  close  (WRITEFILE);
}

変更するファイルが最初にどのように見えるかを次に示します。

<RequestSomething xmlns="http://something.com/accessservice">
   <period xmlns="">
     <start>2013-03-06T00:00:00</start>
     <stop>2013-03-07T00:00:00</stop>
   </period>
    ... The rest of the xml file...
 </RequestSomething>

前もってありがとう、クリスタル

4

3 に答える 3

1

スクリプトにはいくつかの問題があります。

1) 余分な閉じ括弧があるため、コンパイル エラーが発生します。

open(WRITEFILE), ">$ファイル") || die "|$file|を開けません";

次のように書く必要があります

open(WRITEFILE, ">$ファイル") || die "|$file|を開けません";

2) 一重引用符の代わりにバッククォートを使用する必要があります

@filenames = 'ls TC*';

そうしない@filenamesと、ファイル名の実際のリストではなく、文字列 'ls TC*' だけが含まれます。

@filenames = `ls TC*`;

3) Perl インタープリターへのパスは確かです/usr/local/bin/perlか? (which perlコマンドラインからパスを確認してみてください)。そうでない場合は、最初の行を変更する必要があります。

4) スクリプトは、文字列DEFAULT_START_DATEおよびDEFAULT_STOP_DATE (スクリプトへの引数として提供される日付)を含む行を置き換えるように設計されているため、ご提示いただいた XML データでは機能しません。これらの文字列は、表示されたデータには表示されません。

ただし、XML ファイルが次のような場合、スクリプトは機能します。

<RequestSomething xmlns="http://something.com/accessservice">   
    <period xmlns="">
      <start>
          DEFAULT_START_DATE     
      </start>
      <stop>
          DEFAULT_STOP_DATE
      </stop>
    </period>
     ... The rest of the xml file...
 </RequestSomething>

これがスクリプトを動作させるのに役立つことを願っていますが、XML ファイルを変更する非常に信頼性が低く危険な方法を使用しているため、スクリプトを書き直すことをお勧めします。

于 2013-05-08T17:57:46.360 に答える