Wie kann man Werte aus einer Text-Datei in eine zweite Text-Datei übertragen?
Hallo und gleichzeitig auch danke erstmal an alle die sich meiner Frage widmen.
Ich habe eine erste Text-Datei wo Zeile für Zeile als erstes ein Wort dann ein Leerzeichen und dann entweder wieder ein Wort oder eine Zahl ist.
So sieht das in der ersten Text-Datei aus(Ist nur ein Schnipsel):
(Zur Info in der ersten Text-Datei sind es 814 Zeilen)
Nun habe ich eine zweite Text-Datei wo halt NAME und NAME1 und WERT und WERT1 an den Stellen steht wo das jeweils eingefügt werden soll.
So sieht die zweite Text-Datei aus(sie führt sich so fort):
(Und in der Zweiten Text-Datei sind es 4883 Zeilen)
(Nicht wundern ist eine andere Programmiersprache (LISP) die für CAD Programme benutzt wird)
Bei NAME und NAME1 soll das Wort was am Anfang steht eingefügt werden.
Bei WERT und WERT1 soll das eingefügt werden was hinter dem Leerzeichen steht.
Die Sache ist das jedes Wort (das was am Anfang jeder Zeile steht) nur ein mal für NAME und NAME1 eingesetzt werden darf und für den nächsten Abschnitt wird dann das Wort aus der nächsten Zeile ein mal in NAME und NAME1 eingesetzt und immer so weiter.
Das selbe soll auch so mit den Werten passieren also soll jeder Wert (das was hinter dem Leerzeichen steht) nur ein mal für NAME und NAME1 eingesetzt werden und für den nächsten Abschnitt soll dann der Wert aus der nächsten Zeile eingesetzt werden.
Es müssen am Ende 814 solcher Abschnitte mit den jeweiligen Werten aus der ersten Text-Datei in der zweiten Text-Datei sein.
Das bezeichne ich als ein Abschnitt:
Ich bedanke mich im voraus für jede Mithilfe.
Mfg
Melmacker
Ich habe eine erste Text-Datei wo Zeile für Zeile als erstes ein Wort dann ein Leerzeichen und dann entweder wieder ein Wort oder eine Zahl ist.
So sieht das in der ersten Text-Datei aus(Ist nur ein Schnipsel):
3DCOMPAREMODE 3
3DOSMODE 11
ACADLSPASDOC 0
ACISOUTVER 70
AFLAGS 0
ANGBASE 0
ANGDIR 0
ANNOALLVISIBLE 1
ANNOAUTOSCALE -4
ANNOTATIVEDWG 0
APBOX 0
APERTURE 10
AREAPREC -1
AREAUNITS Inftmiµmmmcmmkm
ARRAYASSOCIATIVITY 1
ARRAYTYPE 0
ATTDIA 0
ATTMODE 1
ATTREQ 1
AUDITCTL 0
AUNITS 0
AUPREC 0
AUTOCOMPLETEDELAY 0
AUTOCOMPLETEMODE 37
AUTOMENULOAD 1
AUTORESETSCALES 0
AUTOSNAP 119
AUTOVPFITTING 1
AXISMODE 0
BACKGROUNDPLOT 2
BACTIONCOLOR 7
(Zur Info in der ersten Text-Datei sind es 814 Zeilen)
Nun habe ich eine zweite Text-Datei wo halt NAME und NAME1 und WERT und WERT1 an den Stellen steht wo das jeweils eingefügt werden soll.
So sieht die zweite Text-Datei aus(sie führt sich so fort):
(setq a (getvar "NAME"))
(if (= a WERT)
then (princ "\nBei NAME1 ist ein Fehler aufgetreten."))
(if (= a WERT1)
then (setq Fail 1))
(setq a (getvar "NAME"))
(if (= a WERT)
then (princ "\nBei NAME1 ist ein Fehler aufgetreten."))
(if (= a WERT1)
then (setq Fail 1))
(setq a (getvar "NAME"))
(if (= a WERT)
then (princ "\nBei NAME1 ist ein Fehler aufgetreten."))
(if (= a WERT1)
then (setq Fail 1))
(Und in der Zweiten Text-Datei sind es 4883 Zeilen)
(Nicht wundern ist eine andere Programmiersprache (LISP) die für CAD Programme benutzt wird)
Bei NAME und NAME1 soll das Wort was am Anfang steht eingefügt werden.
Bei WERT und WERT1 soll das eingefügt werden was hinter dem Leerzeichen steht.
Die Sache ist das jedes Wort (das was am Anfang jeder Zeile steht) nur ein mal für NAME und NAME1 eingesetzt werden darf und für den nächsten Abschnitt wird dann das Wort aus der nächsten Zeile ein mal in NAME und NAME1 eingesetzt und immer so weiter.
Das selbe soll auch so mit den Werten passieren also soll jeder Wert (das was hinter dem Leerzeichen steht) nur ein mal für NAME und NAME1 eingesetzt werden und für den nächsten Abschnitt soll dann der Wert aus der nächsten Zeile eingesetzt werden.
Es müssen am Ende 814 solcher Abschnitte mit den jeweiligen Werten aus der ersten Text-Datei in der zweiten Text-Datei sein.
Das bezeichne ich als ein Abschnitt:
(setq a (getvar "NAME"))
(if (= a WERT)
then (princ "\nBei NAME1 ist ein Fehler aufgetreten."))
(if (= a WERT1)
then (setq Fail 1))
Ich bedanke mich im voraus für jede Mithilfe.
Mfg
Melmacker
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 391935
Url: https://administrator.de/forum/wie-kann-man-werte-aus-einer-text-datei-in-eine-zweite-text-datei-uebertragen-391935.html
Ausgedruckt am: 09.05.2025 um 06:05 Uhr
11 Kommentare
Neuester Kommentar

Mit n' bisschen Powershell wäre das kein großes Problem.
Gruß l.
Gruß l.

Klar, ...
$reference = gc "c:\data1.txt"
$code = gc "c:\data2.txt" -raw
$cnt = 0
$code -split '(?sm)^\s*$' | %{
$block = $_
if ($cnt -lt $reference.count){
@('NAME1','NAME') | %{$block = $block.replace($_,$reference[$cnt].split(' '))}
@('WERT1','WERT') | %{$block = $block.replace($_,$reference[$cnt].split(' ')[1])}
}
$block
$cnt++
} | sc 'c:\data2.txt'
Hallo Melmacker,
Ich unterstelle mal Du hast gefragt, weil Du keine Ahnung hast wie's geht.
Ich auch nicht, aber wenn's auch batch sein darf:
Prüf ob Sonderzeichen auch korrekt ausgegeben werden, wie beispielsweise das µ bei Inftmiµmmmcmmkm.
Gruß Frank
Zitat von @Melmacker:
Könntest du mir dafür einen Code schreiben den ich nur noch in Powershell einfügen muss?
die Frage klingt nach: "Könntest Du meine Arbeit machen, weil ich heute keinen Bock habe."Könntest du mir dafür einen Code schreiben den ich nur noch in Powershell einfügen muss?
Ich unterstelle mal Du hast gefragt, weil Du keine Ahnung hast wie's geht.
Ich auch nicht, aber wenn's auch batch sein darf:
@echo off
REM *** Hier die Dateinamen hinter dem = anpassen ***
set eingabedatei=eingabedateiname.txt
set ausgabedatei=ausgabedateiname.txt
chcp 1252
if exist %ausgabedatei% del %ausgabedatei%
echo Lese %eingabedatei% und schreibe %ausgabedatei%...
setlocal EnableDelayedExpansion
for /f "tokens=1,2" %%a in ('type %eingabedatei%') do (
set name=%%a
set wert=%%b
echo ^(setq a ^(getvar "!name!"^)^)>>%ausgabedatei%
echo ^(if ^(= a !wert!^)>>%ausgabedatei%
echo then ^(princ "\nBei !name! ist ein Fehler aufgetreten."^)^)>>%ausgabedatei%
echo ^(if ^(= a !wert!^)>>%ausgabedatei%
echo then ^(setq Fail 1^)^)>>%ausgabedatei%
echo(>>%ausgabedatei%
)
echo Fertig
pause > nul
Prüf ob Sonderzeichen auch korrekt ausgegeben werden, wie beispielsweise das µ bei Inftmiµmmmcmmkm.
Gruß Frank
Hallo Melmacker,
entweder ist das nicht wahr, denn dann hättest Du diese einfache Aufgabe leicht selbst lösen können
oder das hier trifft doch zu:
Gruß Frank
entweder ist das nicht wahr, denn dann hättest Du diese einfache Aufgabe leicht selbst lösen können
oder das hier trifft doch zu:
"Könntest Du meine Arbeit machen, weil ich heute keinen Bock habe."
Zitat von @Pedant
Prüf ob Sonderzeichen auch korrekt ausgegeben werden, wie beispielsweise das µ bei Inftmiµmmmcmmkm.
Wie geht es Deinem griechischen M oder anders gefragt, war 1252 die richtige Codepage?Prüf ob Sonderzeichen auch korrekt ausgegeben werden, wie beispielsweise das µ bei Inftmiµmmmcmmkm.
Gruß Frank
Hallo Melmacker,
zu. 3:
Falls Du das ändern möchtest:
Tutorial zur FOR-Schleife
Tutorial zur FOR-Schleife
zu. 5:
Der Ascii-Dezimalwert des Prozent-Zeichens ist 37.
Das ist daher nicht geeignet, um die Richtigkeit der Codepage zu beurteilen.
interessanter ist das µ bei
(Inftmiµmmmcmmkm = Inches, Feet, Miles, Mikrometer, Millimeter, Zentimeter, Meter, Kilometer)
Ich würde die Eingabedatei testweise um eine Textzeile ergänzen:
und dann prüfen, ob alle Zeichen korrekt in die Ausgabedatei übertragen werden.
Die Zeichenfolge kannst Du natürlich auch noch erweitern.
Nach erfolgreichem Test gilt es die Testzeile natürlich wieder zu entfernen.
Gruß Frank
zu. 3:
Falls Du das ändern möchtest:
Tutorial zur FOR-Schleife
Tutorial zur FOR-Schleife
zu. 5:
Der Ascii-Dezimalwert des Prozent-Zeichens ist 37.
Das ist daher nicht geeignet, um die Richtigkeit der Codepage zu beurteilen.
interessanter ist das µ bei
AREAUNITS Inftmiµmmmcmmkm
Ich würde die Eingabedatei testweise um eine Textzeile ergänzen:
TEST ^°"²§³$%&/(){}=?ß\´`*'#~,;.:+-_<|>@€µ«»½¼
Die Zeichenfolge kannst Du natürlich auch noch erweitern.
Nach erfolgreichem Test gilt es die Testzeile natürlich wieder zu entfernen.
Gruß Frank