Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst 1 Stelle in jeder Zeile einer Textdatei mit fester Satzlänge verändern

Mitglied: icsat

icsat (Level 1) - Jetzt verbinden

02.02.2007, aktualisiert 05.02.2007, 5844 Aufrufe, 11 Kommentare

Hallo,

ich habe gerade das folgende Problem:

Ich habe eine Textdatei mit einer festen Satzlänge von 350 Byte. An der ersten Stelle steht immer eine "0" und ich möchte dort immer eine "2" hinhaben.


Folgendes habe ich mir bereits gebastelt:

@echo off
for /F "delims=" %%a IN (d:\test.txt) DO call :loop "%%a"
pause
exit

:loop
set input=%1
set output="2%input:~2,349%"
echo %output:~2,350%>>d:\test_2.txt
pause
goto :eof


Die Textdate ist wie folgt aufgebaut:

0123 1234 Datensatz1 Peter Müller ... (350 Byte)
0123 5678 Datensatz2 Heinz & Tom ... (350 Byte)
0123 5678 Datensatz3 Hans Mustermann ... (350 Byte)


Bis zur Ausgabe funktioniert das ganze recht gut auch die Ausgabe funktioniert meistens, ich habe nur ein kleines Problem:
Bei meinen Beispieldaten würde er Datensatz 1 und 3 richtig ausgeben und Datensatz 2 nur bis zur Hälfte, bis hinter "Heinz".
Hinter dem "&" erwartet er einen neuen Befehl und bringt eine entsprechende Fehlermeldung. Die Ausgabe würde funktionieren wenn ich nur %output% ausgeben würde, nur kann ich dann die " " " am Anfang und Ende jeder Zeile in der neuen Datei nicht gebrauchen.

Hat von Euch jemand eine Idee?

Gruß André
Mitglied: bastla
02.02.2007 um 19:02 Uhr
Hallo icsat!

Bei Zeile 2 scheitert's am "&". Damit werden in Batch zwei Befehle verbunden.

Idee: VBScript verwenden - wenn Du willst, schreib ich nachher was.

Grüße
bastla
Bitte warten ..
Mitglied: icsat
02.02.2007 um 19:09 Uhr
Hallo bastla,

genau das ist mein Problem.

Denke mit VBS bekomme ich das auch selber hin aber danke für Dein Angebot.

Dachte halt es ginge auch mit nem einfachen Batch, da es immer nur die erste Stelle ist, also eigentlich nicht wirklich anspruchsvoll.

Gruß André
Bitte warten ..
Mitglied: Biber
02.02.2007 um 19:20 Uhr
Na ja, da muss doch nicht gleich was professionelles her...

bei mir klappt jedenfalls mit dem obigen 3-Zeilen-Beispiel:
01.
0123 1234 Datensatz1 Peter Müller ... (350 Byte) 
02.
0123 5678 Datensatz2 Heinz & Tom ... (350 Byte) 
03.
0123 5678 Datensatz3 Hans Mustermann ... (350 Byte)
(steht in der Datei Dokument1.txt) vom CMD-Prompt aus:
01.
>for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2!x:~1,33! 
02.
2123 1234 Datensatz1 Peter Müller 
03.
2123 5678 Datensatz2 Heinz & Tom . 
04.
2123 5678 Datensatz3 Hans Musterma 
05.
-oder auch ein- 
06.
(=19:13:53  D:\temp=) 
07.
>for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2!x:~1! 
08.
2123 1234 Datensatz1 Peter Müller ... (350 Byte) 
09.
2123 5678 Datensatz2 Heinz & Tom ... (350 Byte) 
10.
2123 5678 Datensatz3 Hans Mustermann ... (350 Byte)
Als "Batch" also:
01.
:: ---------snipp setz2anStelle1.bat 
02.
@echo off & setlocal enableDelayedExpansion 
03.
for /f "delims=" %%i in (%1) do @set "x=%%i" & @echo 2!x:~1!
Aufruf:
setz2anStelle1 dokument1.txt >Zieldatei.neu

HTH
Biber
P.S. Ich würde natürlich vom CMD-Prompt tippen:
(for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2!x:~1!)>neudatei.txt
Bitte warten ..
Mitglied: bastla
02.02.2007 um 19:36 Uhr
@Biber

Na ja, da muss doch nicht gleich was professionelles her...
Wär's ohnehin nicht geworden, ist es jetzt aber doch ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
02.02.2007 um 19:39 Uhr
@bastla

aber icsat hat doch geschrieben:
also eigentlich nicht wirklich anspruchsvoll.


Schönes Wochenende
Biber
Bitte warten ..
Mitglied: icsat
02.02.2007 um 20:59 Uhr
Hallo Biber,

hatte gehofft das Du eine Idee hast, allerdings weicht mein Ergebnis ein wenig von Deinem ab:

01.
C:\batch>for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2!x:~1,33! 
02.
2!x:~1,33! 
03.
2!x:~1,33! 
04.
2!x:~1,33! 
05.
 
06.
C:\batch>for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2!x:~1! 
07.
2!x:~1! 
08.
2!x:~1! 
09.
2!x:~1! 
10.
 
11.
C:\batch>for /f "delims=" %i in (dokument1.txt) do @set x=%i & @echo 2%x:~1% 
12.
2123 5678 Datensatz3 Hans Mustermann ... (350 Byte) 
13.
2123 5678 Datensatz3 Hans Mustermann ... (350 Byte) 
14.
2123 5678 Datensatz3 Hans Mustermann ... (350 Byte)
Wofür steht denn das "!" bei der Variable anstelle des "%"? Dieses kenne ich bisher nicht.
Habe beim letzten Versuch die "!" mal durch "%" ersetzt. Das Ergebnis kann ich nicht wirklich deuten.

Und nein, in meiner Texdatei steht nicht dreimal der selbe Satz:

01.
C:\batch>type dokument1.txt 
02.
0123 1234 Datensatz1 Peter M³ller ... (350 Byte) 
03.
0123 5678 Datensatz2 Heinz & Tom ... (350 Byte) 
04.
0123 5678 Datensatz3 Hans Mustermann ... (350 Byte)
Habe das ganze gerade mal unter XP ausprobiert, in original soll dass dann auf einem Windows 2003 Server laufen.
Was benutzt Du für eine Umgebung?

Gruß André

P.S.: Ich bevorzuge das "Bätchchen", da es sich nicht um eine einmalige Aufgabe handelt sondern es müssen täglich im Rahmen eines Jobs ein paar Dateien modifiziert werden.
Bitte warten ..
Mitglied: Biber
03.02.2007 um 12:15 Uhr
Moin icsat,

sorry, war gestern abend etwas in Eile, deshalb jetzt noch mal die fehlenden Infos..

Die Variablenschreibweise !var! statt %var% ist nötig bei der so genannten "verzögerten Variablenauflösung" (neudeutsch: "delayed expansion").

Bedeutet (wenn man/frau die Schnörkel weglässt) die Möglichkeit, in ein und derselben Anweisungszeile einer Variable einen Wert zuzuweisen und sofort diesen Wert zu verwenden.
Standard wäre: Der "neue" Wert ist erst in der nächsten Anweisung verwendbar.

Wenn die "delayed expansion" nicht eingestellt ist (s. o. im Batch: Setlocal EnableDelayedExpansion), dann werden !vars! nicht aufgelöst.
Das ist der Fehler, den Du vom CMD-Prompt erhältst.

Bei mir ist es defaultmäßig eingestellt über RegKey.
Siehe dazu die Hilfe "call /?" oder "Cmd /?"

Bei Deinem zweiten Versuch mit der %var%-Schreibweise passierte beim ersten Aufruf nichts sichtbares ( der SET-Befehl hat zwar funktioniert, abr die Variable war noch nicht in derselben Zeile verwendbar).

Beim zweiten Start war die Variable da... und zwar immer mit dem gleichen Wert (die drei gleichen Zeilen, die ausgegeben werden).

Probier es bitte also mal mit dem Bätschelchen - da steht explizit "EnableDelayedExpansion" drin.

Dann schau'n wir mal.

Gruß
Biber

Der Batch allerdings sollte bei Dir as is laufen.
Bitte warten ..
Mitglied: icsat
03.02.2007 um 14:23 Uhr
Hallo Bieber,

Du hast natürlich recht.

Der Batch läuft. Das hatte ICH gestern nicht mehr ausprobiert.

Eine Frage habe ich dazu aber noch:
Warum interpretiert er in Deiner Lösung das "&" nicht als Beginn eines neuen Befehles?

Gruß André
Bitte warten ..
Mitglied: Biber
03.02.2007 um 16:46 Uhr
Moin André,

Auch Deine Variante würde vermutlich laufen ohne die DelayedExpansion-Aktivierung, wenn Du
set output="2%input:~2,349%"
...änderst in..
set "output=2%input:~2,349%"

(hab ich nicht ausprobiert, dazu hast Du die geeigneteren Testdaten).

Die Variablen-Ummuddelei des M$-CMD-Interpreters kommt jedenfalls gern ans Ende ihrer Fähigkeiten, wenn Anführungszeichen UND Leerzeichen UND Steuerzeichen in einer Variablen enthalten sind.

Lässt sich an anderer Stelle als Feature nutzen, aber in Deinem Fall verursachte es halt einen Klemmer.

Wenn die Info so für Dich ausreichend war, bitte den Beitrag als "erledigt" abhaken.
Wenn nicht, dann natürlich weiter fragen.

Grüsse
Biber
Bitte warten ..
Mitglied: icsat
03.02.2007 um 18:22 Uhr
Hallo Biber,

ich glaube nicht, ich hatte schon diverse "-Varianten ausprobiert.
Naja egal jetzt, es funktioniert ja.

Danke für Deine Hilfe!

Gruß André
Bitte warten ..
Mitglied: Biber
05.02.2007 um 07:47 Uhr
Moin icsat,
ich glaube nicht, ich hatte schon diverse "-Varianten ausprobiert.
Naja egal jetzt, es funktioniert ja.
Tja, ich habe es tatsächlich am Wochenende nochmal angeschaut...

Und muss sagen: Deine Variante sieht genauso aus, wie sie eigentlich funktionieren müsste.
Meine Variante dürfte eigentlich gar nicht fliegen....

Wunderwelt Windows.....

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Textdatei Zeile für Zeile auslesen
Frage von RIPUEDBatch & Shell

Hallo, ich würde gerne mit einem Batch-Skript Zeilen aus einer Textdatei einzeln und nacheinander auslesen und diese dann nach ...

Batch & Shell

Batch um Satz zwischen Anführungszeichen aus 1. Zeile in Textdatei lesen

gelöst Frage von georg2204Batch & Shell3 Kommentare

Hallo, nach langem Suchen und Probieren komme ich leider nicht mehr weiter. Ich habe eine Textdatei, aus dieser soll ...

Batch & Shell

Text in neue 1. Zeile in Textdatei einfügen

Frage von FuxxLiBatch & Shell4 Kommentare

Hallo, Folgender Sachverhalt. Die Warenwirtschaft wirft ein Exportfile mit einer Kopfzeile und danach den Datensätzen aus. Für die Weiterverarbeitung ...

Batch & Shell

Batch: Erste Stellen von zwei aufeinander folgenden Zeilen derselben Textdatei vergleichen

gelöst Frage von ole-objektBatch & Shell5 Kommentare

Hallo mal wieder, meine derzeitige Arbeit erfordert leider viele Vergleiche von verschiedenen Dateien und nun also auch innerhalb derselben ...

Neue Wissensbeiträge
Microsoft

Neuigkeiten zu Server und Office 365 was läuft mit was und was nicht

Tipp von AlFalcone vor 7 StundenMicrosoft

Server Betriebssysteme auf dem die verschiedenen Offices nicht supported sind: • Office 365 ist und wird nicht supported auf Windows ...

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 8 StundenSpeicherkarten1 Kommentar

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 10 StundenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 1 TagHardware1 Kommentar

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Windows 10
Sysprep Fehler im Log kann nicht starten
Frage von grillinator95Windows 1022 Kommentare

Hallo, kann leider SYSPREP nicht mehr starten, Win10 64bit. Logfile sagt folgendes: 2018-10-17 13:44:56, Info SYSPRP 2018-10-17 13:44:56, Info ...

Sicherheitsgrundlagen
EuGH-Urteil - Internetanschluss für die ganze Familie - Filesharer haften trotzdem
Frage von StefanKittelSicherheitsgrundlagen17 Kommentare

Hallo, In diesem Artikel geht es darum, dass Jemand aus der Familie ein Hörbuch illegal hochgeladen hat. Der Vater ...

Apple
MacBook Pro 2018 mit 8 GB oder 16 GB
Frage von SysAdm81Apple14 Kommentare

Hallo zusammen, ich steh vor der Überlegung mir ein MacBook Pro 13 (2018) zu kaufen. Bzgl. SSD habe ich ...

Outlook & Mail
Outlook schiebt Mails aus Posteingang sofort in den Papierkorb
Frage von hermesOutlook & Mail13 Kommentare

Hallo Outlook Fachleute, wir haben hier das Problem, dass Outlook 2010 alle ankommenden Mails seit zwei Tagen einfach in ...