App-GhostWork

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

    This software creates log files from barcode data. The log files are in
    CSV format, LTSV format, and JSON5 format. Each record has the following
    fields.

    --------------------------------------------------------------
             LTSV-label
    CSV-col  JSON5-label  meanings
    --------------------------------------------------------------
             csv          All columns by CSV format
      1      when_        When barcode was read ?
      2      where_       Where barcode was read ? (COMPUTERNAME)
      3      who          Who read the barcode ?
      4      what         What barcode read ?
      5      towhich      Which status after barcode was read ?
      6      why          Why become its status ? (optional)
      7      howmanysec   How many seconds to make this record
      8      looseid      Moderately unique random numbers
    --------------------------------------------------------------

COMMAND FILE NAME

bin/GhostWork.bat  view on Meta::CPAN

    set FS=	

:SET_YYYYMMDD
    color 0F
    rem 0123456789
    rem 2021/09/18
    set YYYYMMDD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%

:SET_WHERE
    color 0F
    set WHERE=%COMPUTERNAME%

:INPUT_WHO
    color 0F
    set INPUT=
    set /p INPUT=%Q_WHO%[Q]^>
    if    {%INPUT%}=={}  goto :INPUT_WHO
    if /i {%INPUT%}=={Q} goto :DO_QUIT
    set WHO=%INPUT%

:INPUT_TOWHICH
    color 0F
    set INPUT=
    set /p INPUT=%Q_TOWHICH%[Q][R]^>
    if    {%INPUT%}=={}  goto :INPUT_TOWHICH
    if /i {%INPUT%}=={Q} goto :DO_QUIT
    if /i {%INPUT%}=={R} goto :INPUT_WHO
    set TOWHICH=%INPUT%

:SET_OUTPUT
    color 0F
    mkdir LOG\%YYYYMMDD%\%TOWHICH% 2>nul
    set OUTPUT=LOG\%YYYYMMDD%\%TOWHICH%\%YYYYMMDD%-%TOWHICH%-%WHO%
    echo %INFO_LOGFILE_IS%%OUTPUT%.ltsv
    title %INFO_LOGFILE_IS%%OUTPUT%.ltsv

:SET_LAST_SERIAL_TIME
    rem convert octal to decimal
    set OCT_ZH_ZM_ZS=%TIME: =0%
    set OCT_HOUR=%OCT_ZH_ZM_ZS:~0,2%
    set OCT__MIN=%OCT_ZH_ZM_ZS:~3,2%
    set OCT__SEC=%OCT_ZH_ZM_ZS:~6,2%
    set /a DEC_HOUR=8%OCT_HOUR%-800
    set /a DEC__MIN=8%OCT__MIN%-800
    set /a DEC__SEC=8%OCT__SEC%-800
    set /a LAST_SERIAL_TIME=(%DEC_HOUR%*60*60)+(%DEC__MIN%*60)+(%DEC__SEC%)

:SET_LAST_WHAT
    set LAST_WHAT=

:DO_WHILE
    color 1F

:INPUT_WHAT
    set INPUT=
    set /p INPUT=No.%COUNT% %Q_WHAT%[Q]^>
    if    {%INPUT%}=={}  goto :INPUT_WHAT
    if /i {%INPUT%}=={Q} goto :DO_QUIT

:AVOID_DOUBLE_SCANNING
    if not {%INPUT%}=={%LAST_WHAT%} goto :SET_WHAT
    color CF
    echo %INFO_DOUBLE_SCANNED%
    goto :INPUT_WHAT

:SET_WHAT
    set WHAT=%INPUT%

:INPUT_WHY
    set WHY=%1
    if not {%1}=={} goto :SET_WHEN
    color E0
    set INPUT=
    set /p INPUT=%Q_WHY%[Q][R]^>
    if    {%INPUT%}=={}  goto :INPUT_WHY
    if /i {%INPUT%}=={Q} goto :DO_QUIT
    if /i {%INPUT%}=={R} goto :INPUT_WHAT
    set WHY=%INPUT%

:SET_WHEN
    color 1F
    rem 0123456789
    rem 2021/09/18
    set YYYYMMDD=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%
    rem 01234567890
    rem 23:34:59.77
    set ZEROTIME=%TIME: =0%
    set WHEN=%YYYYMMDD%%ZEROTIME:~0,2%%TIME:~3,2%%TIME:~6,2%

bin/GhostWork.bat  view on Meta::CPAN

    set /a DEC__SEC=8%OCT__SEC%-800
    set /a SERIAL_TIME=(%DEC_HOUR%*60*60)+(%DEC__MIN%*60)+(%DEC__SEC%)

:SET_HOWMANYSEC
    color 1F
    rem calculation when start time and end time cross 00:00 at midnight
    set /a HOWMANYSEC=%SERIAL_TIME%
    if "%SERIAL_TIME%" lss "%LAST_SERIAL_TIME%" set /a HOWMANYSEC+=24*60*60
    set /a HOWMANYSEC-=%LAST_SERIAL_TIME%

:DO_OUTPUT
    color 1F
    set CSV=%WHEN%,%WHERE%,%WHO%,%WHAT%,%TOWHICH%,%WHY%,%HOWMANYSEC%,%LOOSEID%
    echo %CSV%>>%OUTPUT%.csv
    echo csv:%CSV%%FS%when_:%WHEN%%FS%where_:%WHERE%%FS%who:%WHO%%FS%what:%WHAT%%FS%towitch:%TOWHICH%%FS%why:%WHY%%FS%howmanysec:%HOWMANYSEC%%FS%looseid:%LOOSEID%>>%OUTPUT%.ltsv
    echo {"csv":"%CSV%","when_":"%WHEN%","where_":"%WHERE%","who":"%WHO%","what":"%WHAT%","towitch":"%TOWHICH%","why":"%WHY%","howmanysec":"%HOWMANYSEC%","looseid":"%LOOSEID%"},>>%OUTPUT%.json5
    set /a COUNT=%COUNT%+1

:END_WHILE
    color 1F
    set LAST_SERIAL_TIME=%SERIAL_TIME%
    set LAST_WHAT=%WHAT%
    goto :DO_WHILE

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
: LICENSE AND COPYRIGHT

bin/GhostWork.pl4.bat  view on Meta::CPAN

        use strict;
        use vars qw(
            $COUNT
            $CSV
            $FS
            $FindBin
            $HOWMANYSEC
            $INFO_ANY_KEY_TO_EXIT
            $INFO_DOUBLE_SCANNED
            $INFO_LOGFILE_IS
            $INPUT
            $LAST_SERIAL_TIME
            $LAST_WHAT
            $LOOSEID
            $OUTPUT
            $Q_TOWHICH
            $Q_WHAT
            $Q_WHO
            $Q_WHY
            $SERIAL_TIME
            $TOWHICH
            $VERSION
            $WHAT
            $WHEN
            $WHERE

bin/GhostWork.pl4.bat  view on Meta::CPAN

    $LAST_SERIAL_TIME='';
    $LAST_WHAT='';

SET_YYYYMMDD:
    system('color 0F');
    ($year, $month, $day) = (localtime)[5,4,3];
    $YYYYMMDD=sprintf('%04d%02d%02d', 1900+$year, $month+1, $day);

SET_WHERE:
    system('color 0F');
    $WHERE=$ENV{'COMPUTERNAME'};

INPUT_WHO:
    system('color 0F');
    $INPUT='';
    print STDERR "$Q_WHO\[Q\]>";
    chop($INPUT=<STDIN>);
    if ($INPUT =~ /^$/)   { goto INPUT_WHO; }
    if ($INPUT =~ /^Q$/i) { goto DO_QUIT;   }
    $WHO=$INPUT;

INPUT_TOWHICH:
    system('color 0F');
    $INPUT='';
    print STDERR "$Q_TOWHICH\[Q\]\[R\]>";
    chop($INPUT=<STDIN>);

    if ($INPUT =~ /^$/)   { goto INPUT_TOWHICH; }
    if ($INPUT =~ /^Q$/i) { goto DO_QUIT;       }
    if ($INPUT =~ /^R$/i) { goto INPUT_WHO;     }
    $TOWHICH=$INPUT;

SET_OUTPUT:
    system('color 0F');
    mkdir("LOG", 0777);
    mkdir("LOG\\$YYYYMMDD", 0777);
    mkdir("LOG\\$YYYYMMDD\\$TOWHICH", 0777);
    $OUTPUT="LOG\\$YYYYMMDD\\$TOWHICH\\$YYYYMMDD-$TOWHICH-$WHO";
    print STDERR "$INFO_LOGFILE_IS$OUTPUT.ltsv\n";
    system("title $INFO_LOGFILE_IS$OUTPUT.ltsv");

SET_LAST_SERIAL_TIME:
    ($hour, $min, $sec) = (localtime)[3,2,1];
    $LAST_SERIAL_TIME=($hour*60*60)+($min*60)+($sec);

SET_LAST_WHAT:
    $LAST_WHAT='';

DO_WHILE:
    system('color 1F');

INPUT_WHAT:
    $INPUT='';
    print STDERR "No.$COUNT $Q_WHAT\[Q\]>";
    chop($INPUT=<STDIN>);
    if ($INPUT =~ /^$/)   { goto INPUT_WHAT; }
    if ($INPUT =~ /^Q$/i) { goto DO_QUIT;    }

AVOID_DOUBLE_SCANNING:
    if ($INPUT ne $LAST_WHAT) { goto SET_WHAT; }
    system('color CF');
    print STDERR $INFO_DOUBLE_SCANNED, "\n";
    goto INPUT_WHAT;

SET_WHAT:
    $WHAT=$INPUT;

INPUT_WHY:
    $WHY=$ARGV[0];
    if ($ARGV[0] ne '') { goto SET_WHEN; }
    system('color E0');
    $INPUT='';
    print STDERR "No.$COUNT $Q_WHY\[Q\]\[R\]>";
    chop($INPUT=<STDIN>);
    if ($INPUT =~ /^$/)   { goto INPUT_WHY;  }
    if ($INPUT =~ /^Q$/i) { goto DO_QUIT;    }
    if ($INPUT =~ /^R$/i) { goto INPUT_WHAT; }
    $WHY=$INPUT;

SET_WHEN:
    system('color 1F');
    ($year, $month, $day, $hour, $min, $sec) = (localtime)[5,4,3,2,1,0];
    $WHEN=sprintf('%04d%02d%02d%02d%02d%02d', 1900+$year, $month+1, $day, $hour, $min, $sec);

SET_LOOSEID:
    system('color 1F');
    $LOOSEID=rand(2**15).rand(2**15);

bin/GhostWork.pl4.bat  view on Meta::CPAN

    ($hour, $min, $sec) = (localtime)[2,1,0];
    $SERIAL_TIME=($hour*60*60)+($min*60)+($sec);

SET_HOWMANYSEC:
    system('color 1F');
    # calculation when start time and end time cross 00:00 at midnight
    $HOWMANYSEC=$SERIAL_TIME;
    if ($SERIAL_TIME < $LAST_SERIAL_TIME) { $HOWMANYSEC+=24*60*60; }
    $HOWMANYSEC-=$LAST_SERIAL_TIME;

DO_OUTPUT:
    system('color 1F');
    $CSV="$WHEN,$WHERE,$WHO,$WHAT,$TOWHICH,$WHY,$HOWMANYSEC,$LOOSEID";
    open( CSV,  ">>$OUTPUT.csv");
    print CSV $CSV, "\n";
    open( LTSV, ">>$OUTPUT.ltsv");
    print LTSV "csv:$CSV${FS}when_:$WHEN${FS}where_:$WHERE${FS}who:$WHO${FS}what:$WHAT${FS}towitch:$TOWHICH${FS}why:$WHY${FS}howmanysec:$HOWMANYSEC${FS}looseid:$LOOSEID", "\n";
    open( JSON5,">>$OUTPUT.json5");
    print JSON5 qq<{"csv":"$CSV","when_":"$WHEN","where_":"$WHERE","who":"$WHO","what":"$WHAT","towitch":"$TOWHICH","why":"$WHY","howmanysec":"$HOWMANYSEC","looseid":"$LOOSEID"},>,"\n";
    $COUNT=$COUNT+1;

END_WHILE:
    system('color 1F');
    $LAST_SERIAL_TIME=$SERIAL_TIME;
    $LAST_WHAT=$WHAT;
    goto DO_WHILE;

######################################################################

lib/App/GhostWork.pm  view on Meta::CPAN

This software creates log files from barcode data. The log files are in
CSV format, LTSV format, and JSON5 format. Each record has the following
fields.

  --------------------------------------------------------------
           LTSV-label
  CSV-col  JSON5-label  meanings
  --------------------------------------------------------------
           csv          All columns by CSV format
    1      when_        When barcode was read ?
    2      where_       Where barcode was read ? (COMPUTERNAME)
    3      who          Who read the barcode ?
    4      what         What barcode read ?
    5      towhich      Which status after barcode was read ?
    6      why          Why become its status ? (optional)
    7      howmanysec   How many seconds to make this record
    8      looseid      Moderately unique random numbers
  --------------------------------------------------------------

=head2 Command File Name



( run in 0.444 second using v1.01-cache-2.11-cpan-4e96b696675 )