[Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 483
  • Last Modified:

Perl String Replacing

Hi All,

This is probably so simple that I'll kick myself...

I need a small Perl script which does the following:

Check if Lotus Notes 6 exists (check for existence of Notes.ini in C:\Program Files\Lotus\Notes\)
If not then check for existence of Notes.ini in C:\Lotus\Notes

Open Notes.ini file

See if a line similar to the following exists in the file:

SIEBELFORMPATH=SiebelMemo.nsf

or:

SIEBELFORMPATH=C:\Lotus\Notes\Data\SiebelMemo.nsf

(unfortunately the path in this line could have several variations)

If the line exists modify SiebelMemo.nsf to Siebel7Memo.nsf

If the line doesn't exists then add a line at the end of the file:

SIEBELFORMPATH=Siebel7Memo.nsf

I know I need to use either s/foo/bar/ or m/foobar/ or grep or something but my mind is blank and I can't seem to get it into gear. Any help much appreciated!!!

Gareth
0
g_tunley
Asked:
g_tunley
2 Solutions
 
leflonCommented:
Hi g_tunley,
you may want to try the following little script.
you just have to modify the filenames in the open statements and the output goes to stdout. so you may have to redirect it to different file.

my $fnd = 0;
open(IN,"test.txt") || open(IN,"test1.txt") || die "no notes installed";

while(<IN>) {
    if ( /SIEBELFORMPATH=.*SiebelMemo.nsf/ ) {
        s/SiebelMemo.nsf/Siebel7Memo.nsf/g;
        $fnd = 1;
    }
    print;
}
if ( !$fnd ) {
    print "SIEBELFORMPATH=Siebel7Memo.nsf\n";
}

hth
leflon
0
 
vi_srikanthCommented:
$ARGV[0]='C:\Program Files\Lotus\Notes\Notes.ini';
if (not -e $ARGV[0]) {$ARGV[0]='C:\Lotus\Notes\Notes.ini'}
if (not -e $ARGV[0]) {die "Notes not installed"}
undef($/); $^I='_in'; $_=<>;
s#SIEBELFORMPATH=SiebelMemo.nsf|SIEBELFORMPATH=C:\\Lotus\\Notes\\Data\\SiebelMemo.nsf|$#hi#;
print;
0
 
ZvonkoSystems architectCommented:
Here my version:



@paths = ("C:\\Program Files\Lotus\\Notes", "C:\\Lotus\\Notes");
foreach $dir (@paths){
  if(-e "$dir\\notes.ini"){
    open (INI, "$dir\\notes.ini");
    $data = join "",<INI>;
    close INI;
    $data .= "\nSIEBELFORMPATH=$dir\\data\\Siebel7Memo.nsf\n" unless ($data=~ s/(SIEBELFORMPATH=.*)SiebelMemo.nsf/$1\Siebel7Memo.nsf/gi);
    open (INI, ">$dir\\notes.txt");
    print INI $data;
    close INI;
  }
}




0
 
g_tunleyAuthor Commented:
Oops I seem to have got the accepted and assisted the wrong way round, though i think the points of been awarded properly.

For reference here is the final solution:

#!/usr/bin/perl

my $found = 0;

if (-e "C:/Lotus/Notes/notes.ini") {

      @args = ("ren", "C:\\Lotus\\Notes\\notes.ini", "notes.ini.backup");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error creating backup file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

      $original_filename = "C:/Lotus/Notes/notes.ini.backup";
      $new_filename = "C:/Lotus/Notes/notes.ini";

} elsif (-e "C:/Program Files/Lotus/Notes/notes.ini") {

      @args = ("ren", "C:\\Program Files\\Lotus\\Notes\\notes.ini", "notes.ini.backup");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error creating backup file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

      $original_filename = "C:/Program Files/Lotus/Notes/notes.ini.backup";
      $new_filename = "C:/Program Files/Lotus/Notes/notes.ini";

} else {
      print "Error can't find Lotus Notes you may need to edit the file manually!\n";

      exit -1;
}


open(IN, $original_filename);
open(OUT, ">$new_filename") || die "Error unable to create new notes.ini!!!";

while(<IN>) {
      if ( /SIEBELFORMPATH=.*SiebelEmail.nsf/ ) {
        s/SiebelEmail.nsf/Siebel7Email.nsf/g;
        $found = 1;
    }
    print OUT $_;
}

close(IN);

if ( !$found ) {
    print OUT "SIEBELFORMPATH=Siebel7Email.nsf\n";
}

close(OUT);

if (-e "C:/Lotus/Notes/Data/Siebel/SiebelEmail.nsf" && ! -e "C:/Lotus/Notes/Data/Siebel/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Lotus\\Notes\\Data\\Siebel\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

} elsif (-e "C:/Lotus/Notes/Data/SiebelEmail.nsf" && ! -e "C:/Lotus/Notes/Data/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Lotus\\Notes\\Data\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

} elsif (-e "C:/Program Files/Lotus/Notes/Data/Siebel/SiebelEmail.nsf" && ! -e "C:/Program Files/Lotus/Notes/Data/Siebel/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Program Files\\Lotus\\Notes\\Data\\Siebel\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

} elsif (-e "C:/Program Files/Lotus/Notes/Data/SiebelEmail.nsf" && ! -e "C:/Program Files/Lotus/Notes/Data/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Program Files\\Lotus\\Notes\\Data\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

} elsif (-e "C:/Program Files/Lotus/Notes/Data/" && ! -e "C:/Program Files/Lotus/Notes/Data/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Program Files\\Lotus\\Notes\\Data\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

} elsif (! -e "C:/Lotus/Notes/Data/Siebel7Email.nsf") {

      @args = ("copy", "\\\\server\\siebel7email.nsf", "C:\\Lotus\\Notes\\Data\\");
      $return_code = system(@args);

      if ($return_code != 0) {
            print "Error copying Siebel Email Database file!!!\n";
            print "Error code returned was: " . $return_code . "\n";

            exit -1;
      }

}

exit 0;
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now