Batch aus TXT daten auslesen wie?

*MovieStar*

Banned
Registriert
Okt. 2018
Beiträge
53
Hallo leute

Ich hab was komisches vor. und zwar möchte ich eine TXT ergänzen und umgestalten.
Und zwar automatisiert.

Ich hab als augangsformat eine TXT Datei die Tabstopp getrennt ist.
Das heisst "HIERISTDIE <tabstop> INFODIE <tabstop> IHR BRAUCHT <ENTER>
HALLO <tabstop> ZUSAMMEN"

nun möchte ich jede Information in ein neues Textfile als neue Linie mit zusatzinfo das heisst:

Zusatzinfo+HIERISTDIE
Zusatzinfo+INFODIE
Zusatzinfo+IHR BRAUCHT
Zusatzinfo+HALLO
Zusatzinfo+ZUSAMMEN
....

Wie kann ich sowas bewerkstelligen?
Ich finde erst recht nichts zu Tabstop formatierungen

Ach noch besser wäre es Zusatzinfo+TXT+Zusatzinfo
 
Zuletzt bearbeitet:
Kannst dir in jeder Programmiersprache einen Code schreiben, der dir das umformt. Hab das Mal in C++ gemacht und wirklich programmieren gelernt habe ich nicht. Ist aber ein halber Tag Arbeit. Ein passendes Programm hatte ich nicht gefunden.
http://www.sonderzeichen.de/ASCII/Unicode-0009.html
Google nach Text File read write + Name der Programmiersprache.
 
Auf die Schnelle per AutoIt:
Das Rohmaterial liegt in der Form abc TAB 123 TAB a1b1 usw. in der Datei Input.txt vor
Dieser Code macht daraus:
abc
123
a1b1
Code:
$szFile = "Input.txt"
$szText = FileRead($szFile,FileGetSize($szFile))
$szText = StringReplace($szText, @TAB, @CRLF)
FileDelete($szFile)
FileWrite($szFile,$szText)

Dieses Skript fügt dann die Zusatzinfo in Output.txt
Code:
#include <Misc.au3>
#include <File.au3>

While 1

;Datei Input.txt auslesen
Dim $aTextlines
_FileReadToArray("Input.txt",$aTextlines)
For $i = 1 To UBound($aTextlines)-1

;Datei Output.txt schreiben > zu den ausgelesenen Datensätzen die Zusatzinfo anfügen
$OutputFile = "Output.txt"
$hFileOpen = FileOpen($OutputFile, 9)
FileWriteLine($hFileOpen, "Zusatzinfo+" & $aTextlines[$i] & "+Zusatzinfo" & @CRLF)
FileClose($hFileOpen)

Next

Exit
WEnd
 
Zuletzt bearbeitet:
Geht evtl mit ner Regex:

Code:
/(.+?)(\t|$)/g


Ersetzen durch
Code:
Zusatzinfo $1


(mit Linebreak am Ende)
 
*MovieStar* schrieb:
Datei die Tabstopp getrennt ist.
Das heisst "HIERISTDIE <tabstop> INFODIE <tabstop> IHR BRAUCHT <ENTER>
HALLO <tabstop> ZUSAMMEN"
also sowas (datei.txt):
HIERISTDIE INFODIE IHR BRAUCHT HALLO ZUSAMMEN
nun möchte ich jede Information in ein neues Textfile als neue Linie mit zusatzinfo das heisst:

Zusatzinfo+HIERISTDIE
Zusatzinfo+INFODIE
Zusatzinfo+IHR BRAUCHT
Zusatzinfo+HALLO
Zusatzinfo+ZUSAMMEN
....
Wie kann ich sowas bewerkstelligen?
Ich finde erst recht nichts zu Tabstop formatierungen
Ach noch besser wäre es Zusatzinfo+TXT+Zusatzinfo
In Perl braucht man dazu kein Programm. Da geht man in ein Konsolenfenster imVerzeichnis und tippt ein:
perl -F'[\t\r\n]' -lane 'print "Zusatzinfo+$_+Zusatzinfo" for @F' datei.txt
wobei die obige Datei datei.txt ist.
Ergebnis:
Zusatzinfo+HIERISTDIE+Zusatzinfo Zusatzinfo+INFODIE+Zusatzinfo Zusatzinfo+IHR BRAUCHT+Zusatzinfo Zusatzinfo+HALLO+Zusatzinfo Zusatzinfo+ZUSAMMEN+Zusatzinfo
Das bekommt man in eine andere Datei, indem man den Namen der neuen Datei mit einem Umlenksymbol an die obige Zeile anhängt: ... > neuedatei.txt
 
Zuletzt bearbeitet:
@ryan_blackdrago
CR?
es kommen nur tabstops und halt neue zeilen vor

@blöderidiot
Perl? noch nie gehört? Zusatzmodul zum installieren?
bitte nicht ich suche sowas wie von ryan zb. in vbs oder so
oder batch geht auch.

Das bekommt man in eine andere Datei, indem man den Namen der neuen Datei mit einem Umlenksymbol an die obige Zeile anhängt: ... > neuedatei.txt

kenn ich... deswegen wollte ich zb. ein batch file da es so einfach "wäre"
 
Hallo,
wie gewünscht, in Batch:
Code:
@ECHO OFF & SETLOCAL ENABLEDELAYEDEXPANSION


REM ##### JEDE *.txt-Datei im aktuellen Verzeichnis verarbeiten:
FOR %%A in ("%CD%\*.txt") DO (

    REM ##### Zeile 1 auslesen
    SET /P Zeile1=< %%A

    REM ##### Jedes Token/Fragment in Zeile1 (getrennt durch TAB) durchlaufen und in TXT-Datei schreiben
    FOR %%B IN (!Zeile1!) DO (ECHO Zusatzinfo+%%B+Zusatzinfo>>%%~nA_editiert.txt)

    REM ##### Zeile 2 auslesen
    FOR /f "tokens=1*delims=:" %%G in ('findstr /n "^" %%A') do if %%G equ 2 SET Zeile2=%%H

    REM ##### Jedes Token/Fragment in Zeile2, getrennt durch TAB, durchlaufen und in TXT-Datei schreiben
    FOR %%D IN (!Zeile2!) DO (ECHO Zusatzinfo+%%D+Zusatzinfo>>%%~nA_editiert.txt)

)
 
  • Gefällt mir
Reaktionen: blöderidiot
Das ist genial... aber nur "fast" perfekt...
Ich hab keine Ahnung wie Leute sowas hinbekommen :D echt krass.

Kleine Frage damit es auch perfekt wird.

Ich brauch für jede Line eine andere Zusatzinfo die ich definieren kann.
Wie geht das? (hab mich schlecht ausgedrückt)
zb. so:

Zusatzinfo1+HIERISTDIE+Zusatzinfo1
Zusatzinfo2+INFODIE+Zusatzinfo2
Zusatzinfo3+.....+Zusatzinfo3

Das wäre Genial wen man das so anpassen könnte :D

Wäre noch cool wen mir jemand erklären könnte was die ganzen %%D %%B "^"
%%~nA bedeuten :D
möchte gerne auch was davon verstehen :D
 
Zuletzt bearbeitet:
vASNator schrieb:
Hallo,
wie gewünscht, in Batch:
Code:
@ECHO OFF & SETLOCAL ENABLEDELAYEDEXPANSION
...
Respekt!
Ergänzung ()

*MovieStar* schrieb:
Ich brauch für jede Line eine andere Zusatzinfo die ich definieren kann. Wie geht das? (hab mich schlecht ausgedrückt)
zb. so:
Zusatzinfo1+HIERISTDIE+Zusatzinfo1
Zusatzinfo2+INFODIE+Zusatzinfo2
Zusatzinfo3+.....+Zusatzinfo3
O-ooo

Das *in Batch* zu machen ist schon ein anspruchsvolles Unternehmen. Das könnte ich gar nicht. Perl ist für solche Aufgaben viel viel einfacher anzuwenden. Selbst in Perl, was im Grunde genau dafür gemacht wurde, muß ich jetzt sogar ein kleines Programm schreiben. Vorausgesetzt, das hier ist die "Vorlage-Datei" (von.txt):
HIERISTDIE \t INFODIE \t IHR BRAUCHT HALLO \t ZUSAMMEN
mit 5 Begriffsgruppen - und das ist die "Zusatzinfo-Datei" (zus.txt):
Zusatzinfo1 Zusatzinfo2 Zusatzinfo3
mit 3 verschiedenen "Zusatzinfos". Um das gewünschte Ergebnis zu bekommen:
Zusatzinfo1 + HIERISTDIE + Zusatzinfo1 Zusatzinfo2 + INFODIE + Zusatzinfo2 Zusatzinfo3 + IHR BRAUCHT + Zusatzinfo3 Zusatzinfo1 + HALLO + Zusatzinfo1 Zusatzinfo2 + ZUSAMMEN + Zusatzinfo2
könnte man folgendes Perl-Skript benutzen:
Perl:
use 5.012;                             # modernes Perl 5 (ab 2013) wird benoetig

my ($von, $zus, $aus) = @ARGV;         # Musterdatei, Zusatzdatei, Ausgabe
open my $vh, '<', $von or die "$von $!";     # Datei 'Muster' oeffnen
open my $zh, '<', $zus or die "$zus $!";     # Datei 'Zusatz' oeffnen
open my $ah, '>', $aus or die "$aus $!";     # Datei 'Ausgabe' oeffnen
my @V = split /[\t\r\n]+/, do { local $/; <$vh> }; # 'Muster' einlesen + splitten
my @Z = <$zh>; chomp(@Z);                          # 'Zusatz' einlesen
while (my ($num, $v) = each @V)        {     # ueber alle von-Eintraege iterieren
   my $z = $Z[ $num % scalar(@Z) ];          # das naechste zusatzinfo-Element finden
   printf $ah "%s + %s + %s\n", $z, $v, $z;  # gewuenschten Text in Datei ausgeben
}
close $_ for ($vh, $zh, $ah);                                  # Dateien schliessen
printf "OK, %d Eintraege mit %d Zusatzinfos versehen (%s)!\n", # Statistik ausgeben
        scalar @V, scalar @Z, $aus;
Hier wird auch berücksichtigt, daß es unterschiedliche Anzahlen von Vorlagebegriffen und Zusatzinfos gibt. Man führt das so aus, daß man im Verzeichnis, wo die Dateien von.txt und zus.txt liegen, eingibt:
perl diesesskript.pl von.txt zus.txt ausgabe.txt
Wenn man Windows 10 hat, ist Perl im Grunde dabei, sobald man "Windows Subsystem für Linux" (Ubuntu) installiert hat. Ansonsten kann man sich Perl auch als Windows-Programm runterladen und installieren.
 
Zuletzt bearbeitet:
*MovieStar* schrieb:
Wäre noch cool wen mir jemand erklären könnte was die ganzen %%D %%B "^"
%%~nA bedeuten :D
möchte gerne auch was davon verstehen :D

schau dir mal die Kommentare beim REM an, dann verstehst du es:
Code:
REM Dateiloop: FINDE alle TXT-Dateien im aktuellen Verzeichnis, speichere den gefundendenen Dateipfad in %%A
REM der Buchstabe hinter %% kann frei gewählt werden, von A bis Z und muss ein Buchstabe/Zahl sein!
REM %%A kann bei bedarf "zerlegt" werden, in dem man z.B. zwischen %% und A ein ~n, ~nx, oder ~x einfügt
REM ##############################################################
FOR %%A in ("%CD%\*.txt") DO (
    ECHO der vollständige Pfad zu gefundenen Datei ist %%A
    ECHO der Dateiname mit Dateiendung ist %%~nxA
    ECHO der Dateiname ohne Dateiendung ist %%~nA
    pause
)



*MovieStar* schrieb:
Ich brauch für jede Line eine andere Zusatzinfo die ich definieren kann.
Wie geht das? (hab mich schlecht ausgedrückt)

z.B. in dem du Variablen definierst.
Einfach die Variaben sZusatzinfoXX=deinWert anpassen...

Code:
@ECHO OFF & SETLOCAL ENABLEDELAYEDEXPANSION


REM Variablen mit ZusatzInfos erstellen
REM ####################################################################################
SET "sZusatzinfo_Zeile1_Teil1=MeineZusatzinfo1"
SET "sZusatzinfo_Zeile1_Teil2=MeineZusatzinfo2"
SET "sZusatzinfo_Zeile1_Teil3=MeineZusatzinfo3"

SET "sZusatzinfo_Zeile2_Teil1=MeineZusatzinfo4"
SET "sZusatzinfo_Zeile2_Teil2=MeineZusatzinfo5"


REM JEDE *.txt-Datei im aktuellen Verzeichnis verarbeiten:
REM ####################################################################################
FOR %%A in ("%CD%\*.txt") DO (

    REM ##### Zeile 1 auslesen
    SET /P Zeile1=< %%A

    REM ##### Jedes Token/Fragment in Zeile1 (getrennt durch TAB) durchlaufen und in TXT-Datei schreiben
    SET /A iZaehlerA=0
    FOR %%B in ("!Zeile1:<diese Stelle mit TAB ersetzen>=" "!") do (
        SET /A iZaehlerA+=1
        CALL SET "sZI=%%sZusatzinfo_Zeile1_Teil!iZaehlerA!%%"
        ECHO !sZI!+%%B+!sZI!>>%%~nA_editiert.txt
    )

    REM ##### Zeile 2 auslesen
    FOR /f "tokens=1*delims=:" %%G in ('findstr /n "^" %%A') do if %%G equ 2 SET Zeile2=%%H

    REM ##### Jedes Token/Fragment in Zeile2, getrennt durch TAB, durchlaufen und in TXT-Datei schreiben
    SET /A iZaehlerB=0
    FOR %%C in ("!Zeile2:<diese Stelle mit TAB ersetzen>=" "!") do (
        SET /A iZaehlerB+=1
        CALL SET "sZI=%%sZusatzinfo_Zeile2_Teil!iZaehlerB!%%"
        ECHO !sZI!+%%C+!sZI!>>%%~nA_editiert.txt
    )

)


blöderidiot schrieb:
danke schön, dein Perlscript ist ja auch cool :cool_alt:
 

Anhänge

  • BATCH.zip
    671 Bytes · Aufrufe: 189
Zuletzt bearbeitet:
auf das neuste im Zip

Das funktioniert sehr gut aber ich krieg immer ZUSATZINFO1+"HIERISTDIE"+ZUSATZINFO1
Ich will die zwei "...." weg haben
 
hier die angepasste Version + Möglichkeit 2 verschiedene Zusatzinfos anzugeben, wie in deiner PN gewünscht.
 

Anhänge

  • BATCH.zip
    727 Bytes · Aufrufe: 190
Zurück
Oben