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 Bestimmte Zeilen mit VBS in eine neue TXT Datei übernehmen

Mitglied: m.matt85

m.matt85 (Level 1) - Jetzt verbinden

21.06.2011 um 09:39 Uhr, 4641 Aufrufe, 7 Kommentare

Hallo an Alle,

ich habe folgendes Problem:

Eine Textdatei besteht aus mehreren Zeilen, ab einer Leerzeile beginnen die Datensätze die für mich wichtig sind.

Ich muss nun mit VBS ab der Leerzeile prüfen ob ein ; am Schluss steht oder nicht. Wenn ein ; am Schluss steht soll die Zeile gelöscht werden. Falls keines am Schluss steht soll die jeweilige Zeile außer dem letzten Wert übernomen werden.

z.B. xxxxxx - xxxxxxx;0.000;0.400;0.000;0.125;0.125

d.h. der Wert 0.125 muss gelöscht werden der Rest übernommen.

Habe mal was gefunden, weiß allerdings nicht ob mir der Befehl hier weiterhilft.

intPosRev = InStrRev(strText,",",20)

Kann mir da jemand weiterhelfen wie ich die Sache am Besten programmiere?
Wäre um jede Hilfe dankbar!
Grüße
Mitglied: bastla
21.06.2011 um 10:27 Uhr
Hallo m.matt85 und willkommen im Forum!

Etwa so:
01.
Ein = "D:\Text_alt.txt" 
02.
Aus = "D:\Text_neu.txt" 
03.
Delim = ";" 'Trennzeichen für Felder 
04.
 
05.
Set fso = CreateObject("Scripting.FileSystemObject") 
06.
'gesamten Text in Zeilen-Array einlesen 
07.
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbCrLf) 
08.
 
09.
'Ausgabedatei erzeugen 
10.
Set AusDatei = fso.CreateTextFile(Aus) 
11.
'Flag für "Sollen Zeilen ab jetzt geschrieben werden?" initialisieren 
12.
Schreiben = False 
13.
 
14.
'Schleife über alle Zeilen 
15.
For i = 0 To UBound(Zeilen) 
16.
    'Falls bereits geschrieben werden soll und die Zeile nicht mit dem Trennzeichen endet 
17.
    If Schreiben And Right(Zeilen(i), 1) <> Delim Then 
18.
        'Zeile anhand des Trennzeichens in ein Array "Felder" zerlegen 
19.
        Felder = Split(Zeilen(i), Delim) 
20.
        'Leerzeilen berücksichtigen 
21.
        If UBound(Felder) >= 0 Then 
22.
            'Inhalt des letzten Feldes löschen 
23.
            Felder(UBound(Felder)) = "" 
24.
            'Felder wieder (mit Trennzeichen) zu einer Zeile zusammenfügen 
25.
            AusZeile = Join(Felder, Delim) 
26.
            'Zeile in die Datei schreiben; dabei das überzählige Trennzeichen am Ende abschneiden 
27.
            AusDatei.WriteLine Left(AusZeile, Len(AusZeile) - 1) 
28.
        End If 
29.
    Else 
30.
        'Wenn Leerzeile gefunden, folgende Zeilen schreiben 
31.
        If Zeilen(i) = "" Then Schreiben = True 
32.
    End If 
33.
Next
Grüße
bastla
Bitte warten ..
Mitglied: m.matt85
21.06.2011 um 10:53 Uhr
Danke für deine schnelle Antwort und Hilfe!

Es passt soweit und funktioniert fast , das Programm sollte mir nur die Zeilen ausgeben bei denen ein Wert am Schluss steht, doch momentan werden mehrer Zeilen ausgegeben.

xxxxxx - xxxxxxx;0.000;0.400;0.000;0.125;0.125

Mit dem Programm steht die Zeile nun folgendermaßen in der neuen Datei:

xxxxxx - xxxxxxx;0.000;0.400;0.000 --> es werden die letzten 2 Werte gelöscht.

Die Textdatei besitzt einen Kopf der erhalten bleibt. Ab der Leerzeile befinden sich die Zeilen die mit dem Programm bearbeitet werden.

Kannst du mir vll noch kurz erklären was du mit Leerzeile berücksichtigen und der Letzten if Bedingung meinst?
Wäre super!

Danke für die ausführliche Beschreibung deines Programmes!

Vielen dank!
Bitte warten ..
Mitglied: 76109
21.06.2011 um 11:19 Uhr
Hallo m.matt85!

Ändere mal Codezeile 21:
01.
If UBound(Felder) = 5 Then 
Wenn auch mehr als 6 Felder vorkommen können/dürfen, dann:
01.
If UBound(Felder) >= 5 Then 
Gruß Dieter
Bitte warten ..
Mitglied: bastla
21.06.2011 um 11:31 Uhr
Hallo m.matt85!

Ich kann zwar anhand Deines Beispieles den Fehler nicht nachvollziehen, aber versuch es alternativ mit der folgenden Schleife (ab Zeile 15):
01.
For i = 0 To UBound(Zeilen) 
02.
    'Falls bereits geschrieben werden soll und die Zeile nicht mit dem Trennzeichen endet  
03.
    If Schreiben And Right(Zeilen(i), 1) <> Delim Then 
04.
        'Zeichenanzahl vor dem letzten Trennzeichen ermitteln 
05.
        L = InStrRev(Zeilen(i), Delim) - 1 
06.
        'Wenn es Text vor dem letzten Trennzeichen gibt, ... 
07.
        If L > 0 Then 
08.
            '... nur diesen schreiben, ... 
09.
             AusDatei.WriteLine Left(Zeilen(i), L) 
10.
        Else 
11.
            '... ansonsten die Zeile unverändert ausgeben 
12.
             AusDatei.WriteLine Zeilen(i) 
13.
        End If 
14.
    Else 
15.
        'Wenn Leerzeile gefunden, folgende Zeilen schreiben  
16.
        If Zeilen(i) = "" Then Schreiben = True 
17.
    End If 
18.
Next
Kannst du mir vll noch kurz erklären was du mit Leerzeile berücksichtigen und der Letzten if Bedingung meinst?
Ich hatte das so interpretiert, dass erst nach der ersten Leerzeile Zeilen untersucht und ausgegeben werden sollen - daher wird erst dann das Schreiben "freigegeben" ...

Sollen die Kopfzeile (bis zur ersten Leerzeile) unverändert übernommen werden, müsste die Schleife eher so aussehen:
01.
'Flag für "Sollen Zeilen ab jetzt bearbeitet werden?" initialisieren  
02.
Bearbeiten = False 
03.
For i = 0 To UBound(Zeilen) 
04.
    'Falls bearbeitet werden soll (keine Kopfzeile mehr) 
05.
    If Bearbeiten Then 
06.
        'Zeile nur übernehmen,wenn nicht Trennzeichen am Ende 
07.
        If Right(Zeilen(i), 1) <> Delim Then 
08.
            'Zeichenanzahl vor dem letzten Trennzeichen ermitteln 
09.
            L = InStrRev(Zeilen(i), Delim) - 1 
10.
        'Wenn es Text vor dem letzten Trennzeichen gibt, ... 
11.
            If L > 0 Then 
12.
            '... nur diesen schreiben, ... 
13.
                AusDatei.WriteLine Left(Zeilen(i), L) 
14.
            Else 
15.
            '... ansonsten die Zeile unverändert ausgeben 
16.
                AusDatei.WriteLine Zeilen(i) 
17.
            End If 
18.
        End If 
19.
    Else 
20.
        'Kopfzeile - daher unverändert ausgeben 
21.
        AusDatei.WriteLine Zeilen(i) 
22.
        'Wenn Leerzeile gefunden, folgende Zeilen bearbeiten  
23.
        If Zeilen(i) = "" Then Bearbeiten = True 
24.
    End If 
25.
Next
Grüße
bastla
Bitte warten ..
Mitglied: bastla
21.06.2011 um 12:11 Uhr
@Dieter
Der Test auf
UBound(Felder) > 0
soll nur verhindern, dass
Felder(UBound(Felder)) = ""
danabengeht - für eine Leerzeile ergibt "UBound(Felder)" nämlich -1...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
21.06.2011 um 12:44 Uhr
Hallo bastla!

Das ist mir schon klar, aber ich habe es so verstanden bzw. vermutet, dass es mehre unterschiedliche Datensätze gibt und m.matt85 eben nur diese speziellen Datensätze auslesen will. Kann natürlich auch sein, wie Du ja schon angedeutet hast, dass es mehrere Leerzeilen gibt oder wie auch immer (Ratespiel)

Gruß Dieter
Bitte warten ..
Mitglied: m.matt85
21.06.2011 um 13:19 Uhr
@76109 :es gibt entweder 5 Felder ( wenn nach dem ; kein Wert mehr steht) oder 6 Felder ( wenn nach dem ; ein Wert steht)

@ bastla :das mit der Kopfzeile und mit der veränderten Schleife funktioniert.

Vielen vielen Dank für eure Hilfe!

Grüße
Bitte warten ..
Ähnliche Inhalte
PHP

TXT Datei auslesen und bestimmte Zeilen in Variable setzen

gelöst Frage von 126594PHP11 Kommentare

Hallo zusammen, vorweg muss ich sagen, ich bin (bis jetzt) absoluter Neuling was PHP angeht. Ich will aus einer ...

Batch & Shell

Bestimmte Zeile aus mehreren Dateien in eine neue Datei schreiben

gelöst Frage von Oggy76Batch & Shell5 Kommentare

Hallo zusammen, meine Kenntnisse in Sachen batch/shell sind ehr auf Anfängerniveau zu sehen. Grund -basics im CMD-Prompt sind vorhanden, ...

Entwicklung

Bestimmte zeile aus txt datei auslesen und sich aus zeile 100 einen wert anzeigen lassen ?

gelöst Frage von bob777Entwicklung12 Kommentare

Hallo Suche einen Weg sich aus einer .config (txt) datei einen Wert Spielzeit auszulesen und anzuzeigen? Kann das irgendwer ...

Batch & Shell

Batch: bestimmten string aus einer Zeile in txt löschen

Frage von Vit1985Batch & Shell4 Kommentare

Hallo, ich habe eine Textdatei und dort möchte ich einen bestimmten string löschen! Beispielzeile: Command: Hallo, wie Ich möchte ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 6 StundenHumor (lol)1 Kommentar

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 18 StundenGoogle Android3 Kommentare

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 19 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 22 StundenMicrosoft3 Kommentare

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

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 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 ...

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

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

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...