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

Ausgedruckt am: 19.03.2024 um 03:03 Uhr

Mitglied: lcer00
lcer00 02.11.2017 um 15:00:05 Uhr
Goto Top
und warum machst die Dateikonvertierung nicht in VBA? Ist sicher performenter als immer wieder die Batch aufzurufen.

lcer
Mitglied: makroll10
makroll10 03.11.2017 um 00:35:11 Uhr
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
Mitglied: lcer00
lcer00 03.11.2017 um 07:25:29 Uhr
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
Mitglied: Biber
Biber 03.11.2017 um 10:43:26 Uhr
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
Mitglied: lcer00
lcer00 03.11.2017 um 10:53:44 Uhr
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
Mitglied: makroll10
makroll10 03.11.2017 um 15:27:15 Uhr
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
Mitglied: Biber
Lösung Biber 03.11.2017 aktualisiert um 16:29:05 Uhr
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
Mitglied: makroll10
makroll10 24.11.2017 um 00:04:12 Uhr
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