• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 485
  • 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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

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