App-GhostWork
view release on metacpan or search on metacpan
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.540 second using v1.01-cache-2.11-cpan-4e96b696675 )