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 Zeilen in einer Textdatei verschieben

Mitglied: vvss

vvss (Level 1) - Jetzt verbinden

24.04.2008, aktualisiert 25.04.2008, 3202 Aufrufe, 5 Kommentare

Hallo zusammen,

ich habe eine Texdatei, bei der die Zeilen wie folgt beginnen:

KSTA_
KZEI_
KPPA_
KPPA_
KPPA_
KPPA_
KUTX_
KUTX_
KSTA_
KZEI_
KPPA_
KPPA_
KTVA_
KSTA_
KZEI_
KPPA_
KPPA_
KSTA_
......

Dabei ist KSTA immer der Anfang eines neuen Datensatzes und alles was dazwischen ist gehört zusammen.
Die Zeilen mit KTVA können pro zusammenhängendem Datensatz vorhanden sein, müssen aber nicht.

Nun mein Problem:
Ich möchte mit einer Batchdatei ,wenn die Zeile KTVA_ vorkommt diese unter die Zeile KSTA_ des dazugehörigen Datensatzes verschieben.
Habe schon etwas mit findstr rumprobiert, es will mir aber nicht so recht gelingen.

Kann mir jemand helfen?

Danke
Mitglied: bastla
24.04.2008 um 18:13 Uhr
Hallo -vvss- und willkommen im Forum!

Einige Fragen:
  • Kann je Datensatz mehr als eine Zeile mit KTVA beginnen?
  • Die mit KTVA beginnende(n) Zeile(n) soll(en) in der neuen Datei unmittelbar nach der KSTA-Zeile eingeordnet werden - richtig?
  • Soll eine Sicherungskopie erstellt, bzw die neue Datei unter einem anderen Namen als die Ausgangsdatei gespeichert werden?
  • Hättest Du Einwände gegen eine Lösung in VBScript?

Grüße
bastla
Bitte warten ..
Mitglied: vvss
24.04.2008 um 18:41 Uhr
Hallo bastla,

bin nun schon eine ganze Weile hier im Forum am lesen und probieren.
BIN BEGEISTERT, was man nicht alles mit so einer Batchdatei machen kann.

Nun aber zu meinem Problem.
In einem Datensatz, also die Zeilen zwischen den KSTA's, gibt es falls vorhanden nur eine Zeile die mit KTVA beginnt.
Es gibt aber evtl. mehrere Zeilen KTVA in der gesamten Datei, aber immer nur eine zwischen den KSTA- Zeilen.
Ja, die Zeile KTVA soll immer nach der entsprechenden KSTA- Zeile geschrieben werden.
Eine Sicherungskopie der Originaldatei ist nicht notwendig.
Gegen VBScript spricht natürlich nichts.


Schon mal Danke im Voraus.
Bitte warten ..
Mitglied: bastla
24.04.2008 um 18:55 Uhr
Hallo -vvss-!

BIN BEGEISTERT, was man nicht alles mit so einer Batchdatei machen kann.
Geht mir auch so, aber manchmal eignet sich VBS etwas besser ...

01.
Const Datei = "D:\Daten.txt" 
02.
Const BakExt = ".bak" 
03.
Const String1 = "KSTA_" 
04.
Const String2 = "KTVA_" 
05.
 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
If Not fso.FileExists(Datei) Then 
08.
	WScript.Echo "Die Datei " & Datei & " wurde nicht gefunden!" 
09.
	WScript.Quit 
10.
End If 
11.
Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLF) 
12.
 
13.
Bak = Datei & BakExt 
14.
If fso.FileExists(Bak) Then fso.DeleteFile(Bak) 
15.
fso.MoveFile Datei, Bak 
16.
 
17.
Set DateiNeu = fso.CreateTextFile(Datei, True) 
18.
 
19.
LS1 = Len(String1) 
20.
LS2 = Len(String2) 
21.
RecStartIndex = -1 
22.
S2Index = -1 
23.
U = UBound(Zeilen) 
24.
i = 0 
25.
 
26.
Do While i <= U 
27.
	If StrComp(String1, Left(Zeilen(i), LS1), vbTextCompare) = 0 Then 
28.
		If RecStartIndex >= 0 Then RecWrite 'vorigen Satz schreiben 
29.
		RecStartIndex = i 
30.
	ElseIf 	StrComp(String2, Left(Zeilen(i), LS2), vbTextCompare) = 0 Then 
31.
		S2Index = i 
32.
	End If 
33.
	i = i + 1 
34.
Loop 
35.
RecWrite 'letzten Satz schreiben 
36.
DateiNeu.Close 
37.
If fso.FileExists(Bak) Then fso.DeleteFile(Bak) 'Backup (=Original-Datei) löschen 
38.
 
39.
Sub RecWrite 
40.
DateiNeu.WriteLine Zeilen(RecStartIndex) 
41.
If S2Index >= 0 Then DateiNeu.WriteLine Zeilen(S2Index) 
42.
For j = RecStartIndex + 1 To i - 1 
43.
	If j <> S2Index Then DateiNeu.WriteLine Zeilen(j) 
44.
Next 
45.
S2Index = -1 
46.
End Sub
Bitte den Dateinamen (inkl. Pfad) in der ersten Zeile anpassen.

Zur Sicherheit wird trotzdem ein Backup erstellt, aber gelöscht, wenn das Script durchgelaufen ist. Solltest Du es dennoch behalten wollen, einfach vor die entsprechende Zeile ein Apostroph setzen.

Grüße
bastla

[Edit] Zeile "DateiNeu.Close" ergänzt. [/Edit]
Bitte warten ..
Mitglied: vvss
25.04.2008 um 18:46 Uhr
Hallo bastla,

vielen Dank für deine schnelle Antwort, dein Script funkioniert wunderbar.
Habe aber vergessen zu erwähnen das alle Dateien in einem Ordner so bearbeitet werden sollen.
Mich hat aber der Ehrgeiz gepackt und werde es mal versuchen selber zu lösen.
Ist aber gar nicht so einfach, wenn man das erste mal so ein Script vor sich hat.


Habe das mal so probiert:

Const Verzeichnis = "D:\Daten_FTP"

Set FSO = CreateObject("Scripting.FileSystemObject")
Set Ordner = fso.GetFolder(Verzeichnis)
For Each Datei In Ordner.Files
Datei = Datei.Name
WScript.Echo "Die Datei " & Datei & " wurde gefunden"
If Not fso.FileExists(Verzeichnis & "\" &Datei) Then
WScript.Echo "Die Datei " & Datei & " wurde nicht gefunden!"
WScript.Quit
End If
If fso.FileExists(Verzeichnis & "\" &Datei) Then
WScript.Echo "Die Datei " & Datei & " wurde gefunden!"
WScript.Quit
End If


Next

Kopiere ich abe den Rest deines Scriptes vor das necht, bringt er mir Fehler in der Zeile, wo Sub RecWrite steht. Macht Spaß, bin schon Stunden am probieren, komme da erstmal nicht weiter.

Brauche mal nen kleinen Tip dazu.

Danke
Bitte warten ..
Mitglied: bastla
25.04.2008 um 18:58 Uhr
Hallo -vvss--!

Vorweg eine Anmerkung zu Deinem Script: Die Prüfung auf Vorhandensein der Datei kann entfallen - wenn sie nicht vorhanden wäre, hättest Du sie nicht per Variable "Datei" zur Verfügung (die ".Files"-Aufzählung liefert ja alle Dateien des Verzeichnisses "Ordner") ...

Das Einbinden meines Entwurfes von oben scheitert daran, dass dieser aus zwei Teilen besteht, von denen nur der erste in Deine Schleife darf - Teil 2 ist das Unterprogramm ("Sub") "RecWrite", welches ich ausgelagert habe, da ich diese Funktionalität zweimal benötige (in der Schleife für alle Datensätze mit Ausnahme des letzten, und nach der Schleife nochmals, um auch diesen letzten Satz schreiben zu können).

Grüße
bastla

P.S.: Gepostete Scripts sehen besser aus, wenn sie zwischen < code>-Tags (natürlich ohne das Leerzeichen) stehen (siehe hier)...
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 ...

Ausbildung

Nummerierung jeder Zeile in einer Textdatei

gelöst Frage von MihailAusbildung4 Kommentare

Guten Tag sehr geehrten Admins, Ich versuche seit einer Weile, als absoluter Anfänger eine batch-Datei zu finden die, wie ...

VB for Applications

VBS-Entfernen von Zeilen in einer Textdatei

Frage von Calim3roVB for Applications5 Kommentare

Hallo zusammen Ich möchte aus einer Textdatei Zeilen entfernen. Ich habe drei Dateien, in Datei "A" stehen Wörter, in ...

VB for Applications

Jede Zeile einer Textdatei bis zum Trennzeichen durchsuchen

gelöst Frage von karolsonVB for Applications6 Kommentare

Hallo an alle, Ich möchte mit VBA eine 50MB große Textdatei nach einer Zeichenkette durchsuchen und einige Begriffe aus ...

Neue Wissensbeiträge
Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 1 StundeGoogle Android

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 2 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 5 StundenMicrosoft2 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 23 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server36 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

CPU, RAM, Mainboards
32 gb RAM zu wenig?
Frage von pcguyCPU, RAM, Mainboards13 Kommentare

Hallo zusammen, mein PC verfügt über 32GB Ram. Nun kriege ich bei grossen Dateien im Illustrator die Fehlermeldung das ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing11 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...