makroll10
Goto Top

Batch - Hilfe bei FOR-Schleife

Hallo,
aus einer Access-Datenbank heraus rufe ich per VBA den u.a. Batch mit den Parametern: Reports!UB_System!Pfad ("C:\Users\User\Documents\Polar\") und Reports!UB_Polar!hrmexport1 ("20151101_230M") auf:

Shell Reports!UB_System!Pfad & "\HRMSystem\hrm-export.bat" & " " & Reports!UB_System!Pfad & " " & Reports!UB_Polar!hrmexport1

Mit dem Batch wird dann z.B. der folgende Datensatz (aus der Datei: HRM.txt) übergeben und weiter verarbeitet:

20151101;10:33;02:38;77 205 90 0;13

Das funktioniert auch alles perfekt. Allerdings nur wenn ein Datensatz übergeben wird.

Nun möchte ich aber gerne auch mehr als einen Datensatz durch den Batch nacheinander verarbeiten lassen. Das sähe dann z.B. so aus:

20151101;10:33;02:38;77 205 90 0;13
20151103;06:43;01:20;77 127 90 0;31
20151104;07:14;01:22;77 286 90 0;12
20151105;17:18;01:20;77 294 90 0;0
...

Der Inhalt der Batch-Datei: hrm-export.bat sieht zur Zeit, wie folgt aus:

echo off & setlocal

set "HRM=%1\HRM\HRM.txt"
set "ExportHRM=%1\HRM\%2.hrm"

%ExportHRM% echo [Params]
%ExportHRM% (for /f "tokens=1 delims=;" %%a in (%HRM%) do echo Date=%%a)
%ExportHRM% (for /f "tokens=2 delims=;" %%a in (%HRM%) do echo StartTime=%%a)
%ExportHRM% (for /f "tokens=3 delims=;" %%a in (%HRM%) do echo Length=%%a)
%ExportHRM% echo [HRData]
for /f "tokens=5 delims=;" %%c in (%HRM%) do set HRData1=%%c
set /a i=0
:start1
if /I %i% GEQ %HRData1% goto :next1
set /a i=%i%+1
%ExportHRM% (for /f "tokens=4 delims=;" %%a in (%HRM%) do echo %%a)
goto :start1
:next1


Ich denke einmal, dass ich dafür die ganze Batch-Prozedur um eine "Schleife" erweitert müsste. Nur bekomme ich das leider nicht so recht hin. Vielleicht kann mir ja jemand einen Tip geben..face-wink

Herzlichen Dank im Voraus und Gruß
Markus Roller

Content-Key: 353456

Url: https://administrator.de/contentid/353456

Printed on: April 26, 2024 at 13:04 o'clock

Member: lcer00
lcer00 Nov 02, 2017 at 14:00:05 (UTC)
Goto Top
und warum machst die Dateikonvertierung nicht in VBA? Ist sicher performenter als immer wieder die Batch aufzurufen.

lcer
Member: makroll10
makroll10 Nov 02, 2017 at 23:35:11 (UTC)
Goto Top
Hallo, zunächst einmal vielen Dank für den Hinweis. Ich bediene mich gerne einer Ausgabe per Batch, da die Ausgabedatei in diesem Fall einem sog. HRM-Format entspricht und einen ansonsten "formatierungsfreien" Output benötigt. Mit den VBA-Bordmitteln habe ich das bisher nicht hinbekommen. Insofern würde mir ein Tip in Sachen "Schleife" als "Soforthilfe" zunächst einmal weiter helfen.... Vielen Dank und Gruß Markus
Member: lcer00
lcer00 Nov 03, 2017 at 06:25:29 (UTC)
Goto Top
Na dann. Z.b so
Werte zeilenweise in eine Datei schreiben.

Schleifen- Batch-Datei Liest die wertedatei zeilenweise aus und ruft dann die umformatierungsbatch auf. Müsste auch in einer Datei gehen, wäre aber so als sofortlösung strukturierter, da Du deinen funktionierenden Code nicht ändern müssts.

lcer
Member: Biber
Biber Nov 03, 2017 at 09:43:26 (UTC)
Goto Top
Moin makroll10,

versuche es mit diesem Schnipsel (Arbeitstitel: "hrm-export-all.cmd")
@echo off & setlocal

set "ImportHRM=%1\HRM\HRM.txt"  
set "ExportHRM=%1\HRM\%2.hrm"  

:: Initial Export-Datei neu anlegen
>%ExportHRM% echo.

:: Importdatei einlesen und zeilenweise verarbeiten
FOR /f "delims=" %%f in (%ImportHRM%)  do call :process_1Line "%%f"  
goto :eof
:: Ende des Batches

:Process_1Line
>>%ExportHRM% (for /f "tokens=1-5 delims=;" %%a in (%*) do (  
    echo [Params]
    echo Date=%%a
    echo StartTime=%%b
    echo Length=%%c
    echo [HRData]
    for /L %%x in (0,1,%%e) do echo %%d
    )
  )

goto :eof
::Ende von Process_1Line

Grüße
Biber
Member: lcer00
lcer00 Nov 03, 2017 at 09:53:44 (UTC)
Goto Top
Biber

... und ich dachte, beim selbst-code-basteln lernt man am meisten. face-smile

@makroll10
::Kommentare im Programmcode können echt erhellend sein
face-smile


Grüße

lcer
Member: makroll10
makroll10 Nov 03, 2017 at 14:27:15 (UTC)
Goto Top
Hallo,
super, vielen Dank. Ich habe es gerade ausprobiert. Der Batch funktioniert perfekt!

I-Tüpfelchen wäre noch, wenn er die Daten nicht in eine einzelne Datei, sondern pro Datensatz aus der "HRM.txt" in eine separate Datei schreiben würde....

Die Bezeichnung der einzelnen Dateien läuft über die Variable "%2" in dieser Form herein:
20151101_230M
20151103_115H
20151104_130M
20151105_130L
20151108_230M

Gruß
Markus
Member: Biber
Solution Biber Nov 03, 2017 updated at 15:29:05 (UTC)
Goto Top
Moin makroll10,

na ja, sogar bei irgendwelchen Mini- und Mikro-Codeschipseln gibt es schon gewisse Gepflogenheiten, die einzuhalten sind.
So sollte ja zum Beispiel ein (rekonstruierbarer) Zusammenhang bestehen zwischen meinetwegen der Zeile 14 in der (Import-)Datei HRM.txt und dem daraus zu erzeugenden Dateinamen "20151108_230M".

Aus irgendeinem Parameter %2 wird da nix kommen, es sei denn, du willst doch wieder für jede zu erzeugende Datei einen Aufruf über Access machen.
Aber auch dann müste ja Access "wissen", das der Export "20151108_230M" aus Zeile 14 der HRM.txt erzeugt werden soll.

Ich dachte, du wolltest irgendwas automatisieren?

Also:
a) Ist der Name der Exportdatei ableitbar aus dem Inhalt der einzelnen Zeile in HRM.Txt?
b) Wer brät denn diese HRM.txt-Datei zusammen? Fall das auch Access macht, dann könnte doch an gleicher Stelle so ein Exportformat erzeugt werden.

Bitte spendier uns mal zwei, drei erläuternde Sätze zu diesem Prozess, den du da unterstützen willst.

Grüße
Biber
Member: makroll10
makroll10 Nov 23, 2017 at 23:04:12 (UTC)
Goto Top
Hallo Biber,

hat jetzt zwar bei mir ein wenig gedauert, aber jetzt kommt die Erläuterung zu diesem ganzen Thema:

Der Pulsuhrenhersteller "Polar" hatte angekündigt, sein bisher betriebenes Trainingsportal "polarpersonaltrainer.com" Anfang 2018 zu schließen und nur noch das neue Portal "Polar Flow" zu supporten. In diese Trainingsportale können "von denen die es mögen" die abgeleisteten Trainingsresultate (Laufen, Radfahren, dgl.) hochgeladen werden. Das machen die User teilweise schon seit Jahren und haben demzufolge eine entsprechend lange Historie im "polarpersonaltrainer" stehen. Polar bietet nunmehr an, die Alt-Daten auf einfache Art und Weise per Mausklick in das neue Portal "Polar Flow" zu übertragen. Diese Funktionen steht aber nur für Pulsuhren neueren Datums zur Verfügung. Für Trainingseinheiten, die mit älteren Polaruhren erzeugt und in den "polarpersonaltrainer" hochgeladen wurden, gibt es die Möglichkeit diese Altdaten in ein xml-File zu exportieren. Um diese exportierten xml-Alt-Daten nun irgendwie in das neue Portal "Polar Flow" herein zu bekommen, muss man die exportieren xml-Files in eine sog. HRM-Datei (Heart-Rate-Monitor) konvertieren. Und da es dafür kein entsprechendes Tool gibt, muss man sich halt selbst etwas stricken. In diesem Fall bin ich dann dem "Problem" mit einer Access-Datenbank zu Leibe gerückt. Inzwischen habe ich die Funktion die ursprünglich per "Batch" geplant war als VBA-Script in die Datenbank mit einbauen können läuft also und noch einmal herzlichen Dank für die kompetente Mithilfe.

Gruß
Markus