BIG (Umberto)
2009-06-20 14:13:42 UTC
Anzitutto, mi auguro che ci sia ancora qualcuno che legge/scrive, visto che da
parecchio, questo gruppo, una volta fiorente, sembra un deserto dopo un
attacco atomico.
Scenario:
Ho una cartella sul server (linux) [M:\COMUNE\Archivio Macchine\] con
archiviate le macchine costruite nei svariati anni. Sono parecchie centinaia,
una cartella per macchina, con uno o piú livelli di sottocartelle.
Le macchine, negli anni sono state costruite usando diverse tecnologie
elettroniche (diverse marche di PLC e CN).
Ora, molte cartelle contengono anche dei files di documentazione, che sono la
stampa in ascii del software, altrimenti compilato dal PLC o dal CN, che
richiederebbero, in caso di consultazione, per assistenza ai clienti od altro,
la copia della cartella nel mio PC della scrivania (con WINDOWS XP), e l'avvio
dello specifico programma (dipende da marca a marca) e che non permette la
visione completa di tutto il software, ma di solo un blocco alla volta e rende
faticosa la ricerca.
L'uso invece di una stampa ASCII di tutto il software su un file ASCII,
permette di navigare assai velocemente ed avere una visione globale migliore .
Ora, per mia comoditá, ho bisogno di sapere quali cartelle hanno questa
documentazione, e in quali manca, in modo da provvedere.
Dato le diverse tecnologie elettroniche usate, ho pensato di applicare una
ricerca alla volta per ogni tipo di tecnologia.
Per tutto questo ambaradan, mi appoggio alle features del porting in dos del
programma, originario in ambiente *nix, SED.
Primo caso: (che funziona a meraviglia)
Tutte le cartelle del primo tipo di tecnologia in esame, contengono, come file
unico di identificazione, il file PLCE34.KEY.
Il file contenente la documentazione, é un file in testo puro, con
estensione .DOC, non necessariamente con lo stesso nome della cartella in cui
é contenuto...
Creo sul mio PC un file contenente tutte l'elenco di tutte le cartelle
contenenti il file chiave:
cd M:\COMUNE\Archivio Macchine\
dir /b /s M:PLCE34.KEY > c:9034-1
cd C:
Il file 9034-1 contiene una cosa del tipo:
M:\COMUNE\Archivio Macchine\3375\3375.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3240-3243\3240-3243-mod2.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3240-3243\3240-3243-mod1.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3301\3301.PLC\PLCE34.KEY
Ora mi creo un file (9034-3), ordinato per comoditá, contenente nella parte
terminale *.DOC al posto di PLCE34.KEY. Mi creo, per eventuale consultazione
future,un file (9034-2) contenente il solo path.
set FILE=PLCE34.KEY
type 9034-1 | sed "s/%FILE%//" > 9034-2
type 9034-1 | sed "s/%FILE%/*.DOC/" > temp
type temp | sort > 9034-3
del temp
set FILE=
Ora 9034-3 contiene di questa roba:
M:\COMUNE\Archivio Macchine\3246\plc\*.DOC
M:\COMUNE\Archivio Macchine\3257\plc\*.DOC
M:\COMUNE\Archivio Macchine\3258\PLC\*.DOC
M:\COMUNE\Archivio Macchine\3259\plc\*.DOC
M:\COMUNE\Archivio Macchine\3260\plc\*.DOC
M:\COMUNE\Archivio Macchine\3261\plc\*.DOC
A questo punto debbo fare un test se esite o manca un file con estensione .DOC
nella cartella, un qualcosa tipo:
IF EXIST M:\COMUNE\Archivio Macchine\3259\plc\*.DOC <azione>
per tutte le cartelle. SED, mi viene in aiuto, consentendomi di costruire un
file batch che lanciato, appoggiandosi ad un altro batch, di costruire 2
liste, una contenente le cartelle complete (9034-si) ed una quelle incomplete
(9034-no).
@echo off
cls
echo cancellazione files obsoleti
if exist 9034-si del 9034-si
if exist 9034-no del 9034-no
echo creazione file in corso...
echo @echo off > 3.bat
echo cls >> 3.bat
echo if exist 9034-si del 9034-si >> 3.bat
echo if exist 9034-no del 9034-no >> 3.bat
type 9034-3 | sed "s/^M.*/call 4.bat \x22&\x22/" >> 3.bat
echo.
echo File 3.BAT creato!
Ora il batch 3.BAT creato contiene:
@echo off
cls
if exist 9034-si del 9034-si
if exist 9034-no del 9034-no
call 4.bat "M:\COMUNE\Archivio Macchine\3246\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3257\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3258\PLC\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3259\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3260\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3261\plc\*.DOC"
ed il batch di ausilio 4.BAT contiene:
@echo off
if exist %1 goto yes
if not exist %1 goto no
goto fine
:yes
dir /b /s %1 >> 9034-si
dir /b /s %1 | sed "s/\x22//g"
goto fine
:no
echo %1 | sed "s/\x22//g" | sed "s/*.DOC//" >> 9034-no
:fine
Il risultato é:
9034-si (macchine con documentazione completa)
M:\COMUNE\Archivio Macchine\3207\3207.plc\PLC-D.DOC
M:\COMUNE\Archivio Macchine\3213\PLC.PLC\CINA.DOC
M:\COMUNE\Archivio Macchine\3214\PLC14.PLC\CINA.DOC
M:\COMUNE\Archivio Macchine\3215\PLC15.PLC\CINA.DOC
9034-no (macchine con documentazione da fare)
M:\COMUNE\Archivio Macchine\3278\Plc\
M:\COMUNE\Archivio Macchine\3286\Plc\
M:\COMUNE\Archivio Macchine\3302\3302.plc\
M:\COMUNE\Archivio Macchine\3304\3304.plc\
M:\COMUNE\Archivio Macchine\3306\3306.plc\
--------------------------------------------------------
Ora passiamo alle macchine con il secondo tipo di tecnologia, e che, seguendo
la traccia di cui sopra, non riesco a fare funzionare.
Il file di firma del tipo di tecnologia, é un file con nomi vari, ma con
estensione .XPJ e la documentaxione, sempre su un file ascii, é un file con
estensione .DOC in alcuni casi ed il altri un file SENZA estensione.
Partiamo, supponendo che il file di documentazione sia di tipo .DOC!
Creo la solita lista iniziale:
cd M:\COMUNE\Archivio Macchine\
dir /b /s M:*.XPJ > c:9034-1
cd C:
Il file 9034-1 contiene una cosa del tipo:
M:\COMUNE\Archivio Macchine\temp\3526_PLC.MCH\3526.XPJ
M:\COMUNE\Archivio Macchine\3386\SACC_PLC.MCH\3386.XPJ
M:\COMUNE\Archivio Macchine\3386\SACCA_CN.MCH\STAMPA.XPJ
creo un file 9034-3 con le seguenti istruzioni:
set FILE=*.XPJ
echo Creazione files...
type 9034-1 | sed -e "s/%FILE%/*.DOC/" > temp
type temp | sort > 9034-3
del temp
set FILE=
... ma il risultato non va.
Debbo trovare il modo di cancellare il nome del file, lasciando il solo path ed
aggiungere alla fine il *.DOC, oppure *. nel caso di files senza estensione.
Debbo quindi riuscire a troncare il nome del file dal path.
... E quí chiedo l'aiuto ...
P.S. asterisco e punto, sono espansi nella riga di comando del programma SED,
come <tutti i caratteri>...
For my real address use the X-SPAM header
parecchio, questo gruppo, una volta fiorente, sembra un deserto dopo un
attacco atomico.
Scenario:
Ho una cartella sul server (linux) [M:\COMUNE\Archivio Macchine\] con
archiviate le macchine costruite nei svariati anni. Sono parecchie centinaia,
una cartella per macchina, con uno o piú livelli di sottocartelle.
Le macchine, negli anni sono state costruite usando diverse tecnologie
elettroniche (diverse marche di PLC e CN).
Ora, molte cartelle contengono anche dei files di documentazione, che sono la
stampa in ascii del software, altrimenti compilato dal PLC o dal CN, che
richiederebbero, in caso di consultazione, per assistenza ai clienti od altro,
la copia della cartella nel mio PC della scrivania (con WINDOWS XP), e l'avvio
dello specifico programma (dipende da marca a marca) e che non permette la
visione completa di tutto il software, ma di solo un blocco alla volta e rende
faticosa la ricerca.
L'uso invece di una stampa ASCII di tutto il software su un file ASCII,
permette di navigare assai velocemente ed avere una visione globale migliore .
Ora, per mia comoditá, ho bisogno di sapere quali cartelle hanno questa
documentazione, e in quali manca, in modo da provvedere.
Dato le diverse tecnologie elettroniche usate, ho pensato di applicare una
ricerca alla volta per ogni tipo di tecnologia.
Per tutto questo ambaradan, mi appoggio alle features del porting in dos del
programma, originario in ambiente *nix, SED.
Primo caso: (che funziona a meraviglia)
Tutte le cartelle del primo tipo di tecnologia in esame, contengono, come file
unico di identificazione, il file PLCE34.KEY.
Il file contenente la documentazione, é un file in testo puro, con
estensione .DOC, non necessariamente con lo stesso nome della cartella in cui
é contenuto...
Creo sul mio PC un file contenente tutte l'elenco di tutte le cartelle
contenenti il file chiave:
cd M:\COMUNE\Archivio Macchine\
dir /b /s M:PLCE34.KEY > c:9034-1
cd C:
Il file 9034-1 contiene una cosa del tipo:
M:\COMUNE\Archivio Macchine\3375\3375.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3240-3243\3240-3243-mod2.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3240-3243\3240-3243-mod1.plc\PLCE34.KEY
M:\COMUNE\Archivio Macchine\3301\3301.PLC\PLCE34.KEY
Ora mi creo un file (9034-3), ordinato per comoditá, contenente nella parte
terminale *.DOC al posto di PLCE34.KEY. Mi creo, per eventuale consultazione
future,un file (9034-2) contenente il solo path.
set FILE=PLCE34.KEY
type 9034-1 | sed "s/%FILE%//" > 9034-2
type 9034-1 | sed "s/%FILE%/*.DOC/" > temp
type temp | sort > 9034-3
del temp
set FILE=
Ora 9034-3 contiene di questa roba:
M:\COMUNE\Archivio Macchine\3246\plc\*.DOC
M:\COMUNE\Archivio Macchine\3257\plc\*.DOC
M:\COMUNE\Archivio Macchine\3258\PLC\*.DOC
M:\COMUNE\Archivio Macchine\3259\plc\*.DOC
M:\COMUNE\Archivio Macchine\3260\plc\*.DOC
M:\COMUNE\Archivio Macchine\3261\plc\*.DOC
A questo punto debbo fare un test se esite o manca un file con estensione .DOC
nella cartella, un qualcosa tipo:
IF EXIST M:\COMUNE\Archivio Macchine\3259\plc\*.DOC <azione>
per tutte le cartelle. SED, mi viene in aiuto, consentendomi di costruire un
file batch che lanciato, appoggiandosi ad un altro batch, di costruire 2
liste, una contenente le cartelle complete (9034-si) ed una quelle incomplete
(9034-no).
@echo off
cls
echo cancellazione files obsoleti
if exist 9034-si del 9034-si
if exist 9034-no del 9034-no
echo creazione file in corso...
echo @echo off > 3.bat
echo cls >> 3.bat
echo if exist 9034-si del 9034-si >> 3.bat
echo if exist 9034-no del 9034-no >> 3.bat
type 9034-3 | sed "s/^M.*/call 4.bat \x22&\x22/" >> 3.bat
echo.
echo File 3.BAT creato!
Ora il batch 3.BAT creato contiene:
@echo off
cls
if exist 9034-si del 9034-si
if exist 9034-no del 9034-no
call 4.bat "M:\COMUNE\Archivio Macchine\3246\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3257\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3258\PLC\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3259\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3260\plc\*.DOC"
call 4.bat "M:\COMUNE\Archivio Macchine\3261\plc\*.DOC"
ed il batch di ausilio 4.BAT contiene:
@echo off
if exist %1 goto yes
if not exist %1 goto no
goto fine
:yes
dir /b /s %1 >> 9034-si
dir /b /s %1 | sed "s/\x22//g"
goto fine
:no
echo %1 | sed "s/\x22//g" | sed "s/*.DOC//" >> 9034-no
:fine
Il risultato é:
9034-si (macchine con documentazione completa)
M:\COMUNE\Archivio Macchine\3207\3207.plc\PLC-D.DOC
M:\COMUNE\Archivio Macchine\3213\PLC.PLC\CINA.DOC
M:\COMUNE\Archivio Macchine\3214\PLC14.PLC\CINA.DOC
M:\COMUNE\Archivio Macchine\3215\PLC15.PLC\CINA.DOC
9034-no (macchine con documentazione da fare)
M:\COMUNE\Archivio Macchine\3278\Plc\
M:\COMUNE\Archivio Macchine\3286\Plc\
M:\COMUNE\Archivio Macchine\3302\3302.plc\
M:\COMUNE\Archivio Macchine\3304\3304.plc\
M:\COMUNE\Archivio Macchine\3306\3306.plc\
--------------------------------------------------------
Ora passiamo alle macchine con il secondo tipo di tecnologia, e che, seguendo
la traccia di cui sopra, non riesco a fare funzionare.
Il file di firma del tipo di tecnologia, é un file con nomi vari, ma con
estensione .XPJ e la documentaxione, sempre su un file ascii, é un file con
estensione .DOC in alcuni casi ed il altri un file SENZA estensione.
Partiamo, supponendo che il file di documentazione sia di tipo .DOC!
Creo la solita lista iniziale:
cd M:\COMUNE\Archivio Macchine\
dir /b /s M:*.XPJ > c:9034-1
cd C:
Il file 9034-1 contiene una cosa del tipo:
M:\COMUNE\Archivio Macchine\temp\3526_PLC.MCH\3526.XPJ
M:\COMUNE\Archivio Macchine\3386\SACC_PLC.MCH\3386.XPJ
M:\COMUNE\Archivio Macchine\3386\SACCA_CN.MCH\STAMPA.XPJ
creo un file 9034-3 con le seguenti istruzioni:
set FILE=*.XPJ
echo Creazione files...
type 9034-1 | sed -e "s/%FILE%/*.DOC/" > temp
type temp | sort > 9034-3
del temp
set FILE=
... ma il risultato non va.
Debbo trovare il modo di cancellare il nome del file, lasciando il solo path ed
aggiungere alla fine il *.DOC, oppure *. nel caso di files senza estensione.
Debbo quindi riuscire a troncare il nome del file dal path.
... E quí chiedo l'aiuto ...
P.S. asterisco e punto, sono espansi nella riga di comando del programma SED,
come <tutti i caratteri>...
For my real address use the X-SPAM header
--
+---------------------------------------------------------------------------+
| Velocita' e alcool uccidono. Fatti una pera che e' meglio. |
| |
+-----#11--------------------Campagna contro le pubblicita` idiote.---------+
+---------------------------------------------------------------------------+
| Velocita' e alcool uccidono. Fatti una pera che e' meglio. |
| |
+-----#11--------------------Campagna contro le pubblicita` idiote.---------+