in reply to Re^2: grep confusion
in thread grep confusion

I believe I found out what's causing my 'arbitrary' errors (they only happen sometimes). So here's an update and I welcome any resolutions anyone may have:
I use pdf2text to convert some (work) files to an xls worksheet
everything was going fine until I wrote in an 'opportunity' to edit the XLS file before continuing on with my script.
I use Spreadsheet::WriteExcel; to create the initial XLS (works fine)
I then use
system('C:/Progra~1/OpenOf~1/Program/Scalc "'.$CurrentDirectory.'/Resources/'.$Filename.'"');
(which also works fine) to start OpenOffice for the 'editing' option
then directly after that I (using)
use Spreadsheet::ParseExcel::SaveParser;
start reading the file with the line:
$XlsWorkbook = Spreadsheet::ParseExcel::SaveParser->new()->Parse($CurrentDirectory.'/Resources/'.$Filename);
to 'reload' the file to update my 'optional' changes...
I am under the impression (because it only happens 'sometimes') that when I close the file in OpenOffice, my script does not 'wait' long enough for the file to completely close in OpenOffice... thus I end up trying to read cells that haven't been defined yet because OpenOffice hasn't finished closing the file.
I am (of course) going to play with 'sleep' to see if I can slow things down in my script, but, I read in several places that 'sleep' is kinda dangerous in scripts.
Here's the question: is there a way to tell when OpenOffice has actually completed the close operation before trying to read the file again ?
I have looked around and found that the 'system' command I use can be modified for different actions and found this:
system(`nmon -F file.out -s3 -c1`);
I'm not fluent with the 'system' command and I can't seem to find much information on 'system' command options on the net, should i attempt to play around with this suggestion to see if I can make it work ? -or- is there a module somewhere that I can use to 'watch' OpenOffice' and ensure the XLS file has completely finished/closed/saved before trying to read in the 'changes'?
I REALLY hope I explained things well enough here. I'll be holding a tin can out for anyone's two-bits...

I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...

Replies are listed 'Best First'.
Re^4: grep confusion
by roboticus (Chancellor) on Sep 03, 2017 at 15:38 UTC

    PriNet:

    You could use stat to get the file modification time, and then sit in a loop waiting for the file modification time to change:

    $ cat pm_1198604.pl use strict; use warnings; system("touch FName.dat"); my $ctime = (stat 'FName.dat')[10]; # Proxy for your spreadsheet update... system("(sleep 10; date; touch FName.dat) &"); my $timeout = time + 60; # Don't wait forever! while (1) { # File changed yet? my $new_ctime = (stat 'FName.dat')[10]; last if $new_ctime > $ctime; die "TIMEOUT!" if time > $timeout; print "still unchanged, waiting a little while\n"; sleep 2; } print ".. continuing to next chunk of work\n"; $ perl pm_1198604.pl still unchanged, waiting a little while still unchanged, waiting a little while still unchanged, waiting a little while still unchanged, waiting a little while still unchanged, waiting a little while still unchanged, waiting a little while Sun, Sep 3, 2017 11:35:11 AM .. continuing to next chunk of work

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.

      'Apparently', Spreadsheet::ParseExcel::SaveParser has issues 'editing' existing XLS files:

      "An Excel file is a binary file within a binary file. It contains several interlinked checksums and changing even one byte can cause it to become corrupted"
      -https://groups.google.com/forum/#!topic/spreadsheet-writeexcel/FeEx0vXQErQ

      I believe I am going to have to 'rewrite' the 'optional changes after creation' section of my program to read in the existing XLS with Spreadsheet::ParseExcel then 'recreate' a new copy of the XLS with Spreadsheet::WriteExcel and then overwrite the previous XLS with this new 'modified' copy. I'll post my results when I get this rewritten...(I did notice that 'irronius' errors appear more-so when I tried modifying a cell)

      Has anyone seen this sliced bread thing? I's better than... sliced... well... never mind...
        Final Notes:
        (for anyone following)
        There WAS an issue using the Spreadsheet::ParseExcell module, it really does not like modifying the XLS file then trying to read it back immediately. I ended up re-writing (with some difficulty, not alot of precise info on it) using the Spreadsheet::Read module, which seems (so far), to work just ducky. I appreciate all the time and effort everyone gave with help on my project, I believe I'm to the point of using Use Tk to actually start my script doing something. I ended up not using the grep function as of yet, I may refer to the help provided when I get to the actual GUI part... Thanx a gigabyte to everyone that followed up on my issues (btw; I still get the subscript -1 issue arbitrarily, I will investigate that next).
        In the words of the Swartz... "I'll be back"
        Thanx again, I'll email twinkies out tomorrow.

        Has anyone seen this sliced bread thing? I's better than... sliced... well... never mind...
      excellent idea, let me try implementing that concept and see if 'timing' is really the issue... yuppers, that's a good idea...

      I tried re-inventing the wheel again, but everytime I push it, it still falls flat on it's side...