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

Frage Entwicklung Batch & Shell

Mitglied: vvss

vvss (Level 1) - Jetzt verbinden

24.04.2008, aktualisiert 25.04.2008, 3195 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
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 6 StundenApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 11 StundenWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 11 StundenWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 23 StundenInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Von rj11 auf rj45
Frage von jensgebkenLAN, WAN, Wireless19 Kommentare

Hallo Gemeinschaft, könnt ihr mir vielleicht bei der anfertigung eines Kabels helfen - habe ein rj 11 stecker und ...

Netzwerkmanagement
Firefox Profieles im Roaming
gelöst Frage von Hendrik2586Netzwerkmanagement17 Kommentare

Hallo liebe Leute. :) Ich hab da ein kleines Problem, welches anscheinend nicht unbekannt ist. Wir nutzen hier in ...

LAN, WAN, Wireless
Häufig Probleme beim Anmelden in WLAN
Frage von mabue88LAN, WAN, Wireless15 Kommentare

Hallo zusammen, in einem Netzwerk gibt es relativ häufig (1-2 mal pro Woche) Probleme mit der WLAN-Verbindung. Zunächst mal ...

Windows Server
Remotesteuerung der Sitzung (Kennung XX) fehlgeschlagen
gelöst Frage von Stefan91Windows Server14 Kommentare

Hallo Zusammen, seit kurzem bekomme ich oben genannte Fehlermeldung, wenn ich versuche eine Remotesitzung über den Taskmanager fernzusteuern (Rechtsklick ...