emaka1710
Goto Top

Bestimmte Stelle aus Textdatei auslesen

Guten Tag zusammen,

ich begrüße hiermit zu meinem ersten Beitrag hier. Ich habe hier schon oft als Gast mitgelesen, wenn ich ein Problem hatte, aber nun finde ich leider keine Lösung.
Ich schreibe ab und an kleine Routinen per Batch, damit ich selbst weniger Arbeit habe. In meinem Problemfall soll das Script folgendes tun:

Der User (also ich) soll nach dem Ausführen einen Text eingeben (Format ist immer das gleiche, einfach nur copy&paste aus einem anderen Programm).
Dabei werden Informationen aus diesem Text herausgefiltert und in einer .txt Datei ausgegeben. Dies kann der User dann kopieren und weiterverwenden.

Das Format, in dem der Text eingegeben wird, lautet wie folgt:
(FPL-XXXXX[XX]-VG-...

Die zwei X in der Klammer sind optional, ich habe nach AB "..." eingefügt, um das ganze abzukürzen. Das danach ist so ziemlich das selbe.


Ich mit meinem, für Amateure üblichem, "gefährlichem" Halbwissen habe bis jetzt folgendes Script auf die Beine gestellt:

@echo off & setlocal enableDelayedExpansion
 
if not exist %temp%\main mkdir %temp%\main
set tmp=%temp%\main

set IFPSin=
set /p IFPSin=  %=%
echo %IFPSin%>%tmp%\IFPSinput.tmp
set IFPSinput=%tmp%\IFPSinput.tmp
:Callsign
set FPL=%tmp%\FPL.tmp
type nul>%FPL%
for /f "usebackq delims= %%i in ("%IFPSinput%") do set Callsign=%%i  
!Callsign:~6,7!>%FPL%
echo %Callsign%
pause

Die Sprungmarke "Callsign" dient mir zur besseren Übersicht (wird ja in Notepadd++ farblich hervorgehoben).

Nun zum Problem:
Leider schließt sich das Script, sobald ich zu Zeile 17 komme (habe ich ganz einfach mir "pause" überprüft).
Ich vermute, dass ich an der Stelle einen Fehler gemacht habe. Ich kenne mich leider wenig mit "for" aus. Ich nehme mir (wie oben schon angedeutet) gerne Script-Schnipsel hier aus dem Forum heraus. Ich verstehe in etwa, was diese tun, aber mir ist nicht ersichtlich, wo das Problem liegt.

Ich würde gerne jede Buchstabenfolge in eine .tmp oder eine .txt bringen (werden am Ende des Scripts wieder gelöscht).
Vielleicht kann mir hier ja Jemand weiterhelfen.

Ich bedanke mich an dieser Stelle schon einmal!

Grüße
EMAKA1710

Content-Key: 656564

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

Printed on: April 23, 2024 at 09:04 o'clock

Mitglied: 147669
Solution 147669 Feb 26, 2021 updated at 21:01:25 (UTC)
Goto Top
Dafür würde ich ehrlich gesagt heutzutage kein Batch mehr nehmen sondern direkt auf die Powershell ausweichen, die hat dafür wesentlich bessere Mittel schon weil Batches mit Sonderzeichen/Encodings nicht sonderlich flexibel sind.
$txt = read-host "Bitte Text eingeben"  
$ergebnis = [regex]::match($txt,'(?is)FPL-(.{1,7})-VG-').Groups[1].Value  
$ergebnis
Das ganze kannst du auch in ner Batch nutzen wenn du das noch unbedingt willst
@echo off
set /p Eingabe=Bitte Text eingeben:
for /f "delims=" %%a in ('powershell -EP Bypass -C "[regex]::match('%Eingabe%','(?is)FPL-(.{1,7})-VG-').Groups[1].Value"') do set "ergebnis=%%a"  
echo %ergebnis%
Das Format, in dem der Text eingegeben wird, lautet wie folgt:
(FPL-XXXXX[XX]-VG-...
Gut aber was davon brauchst du genau? Das wird leider nicht ganz klar in deinem langen Post. Habe in den Codes oben diesen ganzen Ausdruck in eine Regular Expression gepresst, für die Xe von der Anzahl her minimal 5-7 stück beliebige Zeichen.

Gruß SK
Member: EMAKA1710
EMAKA1710 Feb 26, 2021 updated at 23:16:09 (UTC)
Goto Top
Zitat von @147669:

Dafür würde ich ehrlich gesagt heutzutage kein Batch mehr nehmen sondern direkt auf die Powershell ausweichen, die hat dafür wesentlich bessere Mittel schon weil Batches mit Sonderzeichen/Encodings nicht sonderlich flexibel sind.

Hallo SchmitzKatz, danke für deine Antwort!
Ich habe schon mit 12 Jahren angefangen mit Batch und kann mich ehrlich gesagt nicht so mit Powershell anfreunden. Ich habe es schonmal probiert, aber da waren mir dann die Befehle manchmal zu umständlich. Bei Batch weiß ich bei relativ einfachen dingen, was ich zu tun hab.

Zitat von @147669:

Gut aber was davon brauchst du genau? Das wird leider nicht ganz klar in deinem langen Post.

Ich weiß - Viel Geschwafel nix dahinter...

Ich brauche davon das, was ich oben als "X" gekennzeichnet habe. Die Xe werden dann verschiedene Buchstaben oder Zahlen sein. Dabei liegt die Anzahl der Xe (Wie ich vorhin falsch erklärt habe) zwischen 1 und 7.


Ich werde das später einmal probieren. Ich melde mich dann wieder zurück.


Grüße
EMAKA1710

EDIT: Selbsterkenntnis gelöscht da nun in Antwort ersichtlich
Mitglied: 147669
147669 Feb 26, 2021 updated at 21:07:11 (UTC)
Goto Top
Ich brauche davon das, was ich oben als "X" gekennzeichnet habe. Die Xe werden dann verschiedene Buchstaben oder Zahlen sein. Dabei liegt die Anzahl der Xe (Wie ich vorhin falsch erklärt habe) zwischen 1 und 7.

Hab's dir oben angepasst.

aber da waren mir dann die Befehle manchmal zu umständlich.
Normalerweise ist's ja eigentlich umgekehrt, die PS ist da wesentlich einheitlicher strukturiert, mit den CMDLets ja übergreifend klar und verständlich.
Vermutlich bist Du nicht am Ball geblieben denn nur wenn man mal durchsteigt lernt man sie zu schätzen. Batch willst du dann eigentlich nicht mehr sehen, vor allem schreibt man sich damit ja meist einen Wolf für so simple Dinge.
Member: EMAKA1710
EMAKA1710 Feb 26, 2021 at 23:42:12 (UTC)
Goto Top
So da bin ich wieder.
Nach ein paar "Startschwierigkeiten" (habe vergessen, %Eingabe% durch meine Variable zu ersetzen) Funktioniert das Script wunderbar.

Zitat von @147669:

Vermutlich bist Du nicht am Ball geblieben denn nur wenn man mal durchsteigt lernt man sie zu schätzen. Batch willst du dann eigentlich nicht mehr sehen, vor allem schreibt man sich damit ja meist einen Wolf für so simple Dinge.

Ok vielleicht auch das. Ich werde mich wohl mal damit befassen müssen, sobald Zeit dafür ist.

Ersteinmal bedanke ich mich für deine rasche Hilfe!
Ich habe das Tema als gelöst markiert und deinen Beitrag markiert.

Grüße
EMAKA1710