|
| konvertering af .logfil udseende via progr~ Fra : Heine Christensen |
Dato : 25-02-03 11:02 |
|
Hej
Sagen er at jeg skal have konverteret en .log fil fra et format til et
andet.
Inputfilen(flad tekstfil) ser såledet ud:
0 25.00
Hvor nul er nummeret på temperaturføleren, denne er ligegyldigt, herefter
kommer det en <TAB> og så kommer selve temperaturen som jeg skal bruge.
Formatet jeg skal have denne ud i/ændret til er følgende, hvis temperaturen
er positiv
25.00
0
0
0
og hvis den er negativ
0
25.00
0
0
Hvad gør jeg? ydermere vil det være fedt hvis jeg kunne få det lavet således
at de to sidste 0 i output filen kunne bestemmes med en parameter eller
lign....Jeg har fundet en løsning hvis vi snakker asp, men ikke så fedt at
skulle starte en IE for at køre scriptet hvert 5 minut
Jeg skal nemlig have talene ind i MRTG og den kræver de 4 tal.
Det første ciffer er til den første graf, nr 2 til den anden og nr 3 og 4 er
navn på enheden og uptime. Derfor rart hvis man kunne ændre disse i en evt
programstump
Er der en venlig sjæl som lige har styr på noget delphi, VB eller lign, og
som har 5 min til at kigge på det.... som inspiration kan i evt se asp filen
som kan klare dette?
På forhånd tak
Heine Christensen
| |
Tomas Christiansen (25-02-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 25-02-03 14:19 |
|
Heine Christensen skrev:
> Hej
Selv hej.
> Sagen er at jeg skal have konverteret en .log fil fra et format til
et
> andet.
Da det er en ret simpel konvertering, og da du vist ikke har det store
kendskab til VB, og sådan noget altså på ét eller tidspunkt skal laves
om, er det måske en íde at kigge på noget fortolket i stedet for noget
kompileret.
Hvis du bruger Windows 2000 (virker formentlig også i XP), kan du
f.eks. oprette en fil temp.bat med følgende indhold:
@Echo off
SetLocal
Set OptPar=0
If not '%1'=='' (Set OptPar=%1)
For /f "tokens=1,2" %%a in (ind.log) do (
For /f "tokens=1 delims=0123456789." %%t in ("*%%b") do (
If '%%t'=='*-' (
echo 0
echo %%b
echo %OptPar%
echo %OptPar%
) Else (
echo %%b
echo 0
echo %OptPar%
echo %OptPar%
) ) )
EndLocal
Nu kan du kalde temp.bat med angivelse af din inputfil, og du kan
redirigere output ud i en logfil eller undlade redirigering, hvorved
det kommer på skærmen, f.eks.
temp ind.log
temp ind.log >ud.log
Du kan også angive hvad der skal stå i de 3. og 4. linie i output,
f.eks. hvis du ønsker at der skal stå 777:
temp ind.log 777 >ud.log
-------
Tomas
| |
Heine Christensen (26-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 26-02-03 02:57 |
|
"Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
> @Echo off
> SetLocal
> Set OptPar=0
> If not '%1'=='' (Set OptPar=%1)
> For /f "tokens=1,2" %%a in (ind.log) do (
> For /f "tokens=1 delims=0123456789." %%t in ("*%%b") do (
> If '%%t'=='*-' (
> echo 0
> echo %%b
> echo %OptPar%
> echo %OptPar%
> ) Else (
> echo %%b
> echo 0
> echo %OptPar%
> echo %OptPar%
> ) ) )
> EndLocal
Okay, ser sq godt ud
> Du kan også angive hvad der skal stå i de 3. og 4. linie i output,
> f.eks. hvis du ønsker at der skal stå 777:
> temp ind.log 777 >ud.log
Tak, nu kan jeg selv justere lidt ind på det.......fedt at jeg slap for at
skulle have noget kompileret, dette her er perfekt da jeg nu selv kan ændre
lidt i det...
Endnu engang tak!
HC
Btw. jeg vidste sq ikek man kunne så meget i .bat filer
| |
Heine Christensen (26-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 26-02-03 03:10 |
|
Øhmm... lige en lille ting, er det mon muligt at fjerne . fra output,
således at 25.01 bliver til 2501?
Ellers et simpelt men yderst brugbart "script"... thnx endnu en gang
HC
| |
Tomas Christiansen (26-02-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 26-02-03 08:02 |
|
Heine Christensen skrev:
> Øhmm... lige en lille ting, er det mon muligt at fjerne . fra
output,
> således at 25.01 bliver til 2501?
Ja, og jeg kan se at jeg vist ikke har publiseret den rigtige version
af bat-filen, idet du ikke får lov til at angive input-filens navn på
kommando-linien. Det er fixet i scriptet nedenfor.
Ang. at 25.01 skal blive til 2501. Det er meget fint, men hvad så med
40.1 og 4.01. Skal de begge blive til 404? Eller er der altid 4 cifre
(2 før og 2 efter ".")?
Hvis det sidste er tilfældet, er ikke det noget problem:
@Echo off
SetLocal
Set OptPar=0
Set Comma=
If not '%2'=='' (Set OptPar=%2)
If not '%3'=='' (Set Comma=%3)
For /f "tokens=1,2" %%a in (%1) do (
For /f "tokens=1,2 delims=." %%x in ("%%b") do (
For /f "tokens=1 delims=0123456789." %%t in ("*%%b") do (
If '%%t'=='*-' (
echo 0
echo %%x%Comma%%%y
echo %OptPar%
echo %OptPar%
) Else (
echo %%x%Comma%%%y
echo 0
echo %OptPar%
echo %OptPar%
) ) ) )
EndLocal
Bemærk at jeg har indført en tredie parameter, som angiver hvilket
decimalskilletegn som skal bruges. Angives intet udelades
skilletegnet.
Hvis du ønsker f.eks. "." som decimalskilletegn, kan du kalde temp.bat
således:
temp ind.log 0 . >ud.log
Og ja, batch-programmering ligner efterhånden BASIC en del (med tryk
på LIGNER).
-------
Tomas
| |
Heine Christensen (26-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 26-02-03 10:21 |
|
"Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
> Og ja, batch-programmering ligner efterhånden BASIC en del (med tryk
> på LIGNER).
hehe
Tak igen, det ruller perfekt!
HC
| |
Heine Christensen (26-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 26-02-03 19:43 |
|
"Heine Christensen" <hc@teamhm.dk> skrev i en meddelelse
> Tak igen, det ruller perfekt!
Ups, jeg var for tidligt ude, når temperaturen er -1.00 skrives der -100 i
linie 2, det skulle have bare have været 100, altså uden -
Har du stadig 2 min til at kiige på det
HC
| |
Tomas Christiansen (26-02-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 26-02-03 22:53 |
|
Heine Christensen skrev:
> Ups, jeg var for tidligt ude, når temperaturen er -1.00 skrives
der -100 i
> linie 2, det skulle have bare have været 100, altså uden -
Prøv dette (bemærk at du nu har mulighed for at angive default navn på
input-logfilen):
@Echo off
SetLocal
Set InFile=angiv_default_filnavn.log
Set OptPar=0
Set Comma=
If not '%1'=='' Set InFile=%1
If not '%2'=='' Set OptPar=%2
If not '%3'=='' Set Comma=%3
For /f "tokens=1,2" %%a in (%InFile%) do (
For /f "tokens=1,2 delims=." %%x in ("%%b") do (
For /f "tokens=1,* delims=-" %%m in ("*%%x%Comma%%%y") do (
If '%%m'=='*' (
echo 0
echo %%n
echo %OptPar%
echo %OptPar%
) Else (
echo %%x%Comma%%%y
echo 0
echo %OptPar%
echo %OptPar%))))
EndLocal
-------
Tomas
| |
Heine Christensen (27-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 27-02-03 02:31 |
|
"Tomas Christiansen" <toc-nospam-01@blikroer.dk> skrev i en meddelelse
> Prøv dette (bemærk at du nu har mulighed for at angive default navn på
> input-logfilen):
Er hermed gjort, og ja det spiller sq....du kører klatten må jeg
sige....mega mange tak... nu tror jeg heller ikke der er mere at komme
efter, jeg vil god lige lade den køre på min MRTG natten over.
Så poster jeg lige det som jeg kører med i in helhed, så kan du også se de
småændringer jeg har tilføjet....
btw, er der ikek et sted på nettet hvor programmerings-newbies som mig kan
læse lidt om dette, jeg er ikek interesseret i VS, Delphi osv....mere .bat,
det har jeg sq brug for engang imellem.....Jeg har rodet ASP, og fatter godt
hvordan det virker... Så hvis du har nogle link til noget materiale ville
det være perfekt...
HC -> Going down
| |
Tomas Christiansen (27-02-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 27-02-03 09:24 |
|
Heine Christensen skrev:
> Så poster jeg lige det som jeg kører med i in helhed, så kan du også
se de
> småændringer jeg har tilføjet....
Fint!
> btw, er der ikek et sted på nettet hvor programmerings-newbies som mig
kan
> læse lidt om dette, jeg er ikek interesseret i VS, Delphi osv....mere
..bat,
> det har jeg sq brug for engang imellem.....
Prøv at spørge i dk.edb.programmering (hvor vi i virkeligheden burde
have fortsat vores kommunikation).
Hvis jeg har brug for at vide noget om batch-programmering, starter jeg
en kommando-prompt og bruger følgende kommandoer til at give mig hjælp:
HELP|MORE
FOR /? (eller HELP FOR)
HELP SET
HELP IF
HELP CMD
HELP CMD giver hints til at læse hjælpen for SET, IF, FOR, SETLOCAL, ...
som kan være ret interessante mhp. batch-programmering.
-------
Tomas
| |
Heine Christensen (28-02-2003)
| Kommentar Fra : Heine Christensen |
Dato : 28-02-03 01:36 |
|
Som lovet, en udskrift af min opsætning.
Jeg er dog kommet til at se at mine følere er for "billige/små", så de
springer ½ grad pr trin, så dem skal jeg lige have skiftet....ellers er det
perfekt, softwaren køre uden probs.
Her er min .bat fil som kaldes fra MRTG.
@echo off
REM %1 = Føler nummer
REM %2 = Tekst i linie 4
REM %3 = Tegn som skal erstatte komma
C:
CD \MRTG\BIN
REM Her slettes den gamle logfil
del %1.log
REM Her aflæses følerne
digitemp -s1 -t%1 -o2 -l%1.log >nul:
REM Her hentes data fra logfil og udskrives til MRTG
SetLocal
Set OptPar=0
Set Comma=
If not '%2'=='' Set OptPar=%2
If not '%3'=='' Set Comma=%3
For /f "tokens=1,2" %%a in (%1.log) do (
For /f "tokens=1,2 delims=." %%x in ("%%b") do (
For /f "tokens=1,* delims=-" %%m in ("*%%x%Comma%%%y") do (
If '%%m'=='*' (
echo 0
echo %%n
echo 0
echo %OptPar%
) Else (
echo %%x%Comma%%%y
echo 0
echo 0
echo %OptPar%))))
EndLocal
HC
| |
|
|