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

Frage Entwicklung VB for Applications

Mitglied: m.matt85

m.matt85 (Level 1) - Jetzt verbinden

21.06.2011 um 09:39 Uhr, 4634 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
Viren und Trojaner

Deaktivierter Keylogger in HP Notebooks entdeckt

Information von bitcoin vor 4 StundenViren und Trojaner

Ein Grund mehr warum man Vorinstallationen der Hersteller immer blank bügeln sollte Der deaktivierte Keylogger findet sich im vorinstallierten ...

Router & Routing

Lets Encrypt kommt auf die FritzBox

Information von bitcoin vor 8 StundenRouter & Routing

In der neuesten Labor-Version der FB7490 integriert AVM unter anderem einen Let's Encrypt Client für Zugriffe auf das Webinterface ...

Internet

Was nützt HTTPS, wenn es auch von Phishing Web-Seiten genutzt wird

Information von Penny.Cilin vor 3 TagenInternet17 Kommentare

HTTPS richtig einschätzen Ob man eine Webseite via HTTPS aufruft, zeigt ein Schloss neben der Adresse im Webbrowser an. ...

Webbrowser

Bugfix für Firefox Quantum released - Installation erfolgt teilweise nicht automatisch!

Erfahrungsbericht von Volchy vor 4 TagenWebbrowser8 Kommentare

Hallo zusammen, gem. dem Artike von heise online wurde mit VersionFirefox 57.0.1 sicherheitsrelevante Bugs behoben. Entgegen der aktuellen Veröffentlichung ...

Heiß diskutierte Inhalte
Batch & Shell
Trusted Sites für alle User auf dem PC einpflegen
Frage von xXTaKuZaXxBatch & Shell12 Kommentare

Aufgabestellung: Es sollen auf 1 PC (bzw. mehreren PCs) vertrauenswürdige Sites per Powershell eingetragen werden, die für alle User ...

Voice over IP
Telefonstörung - Ortsrufnummern kein Verbindungsaufbau
Frage von Windows10GegnerVoice over IP10 Kommentare

Hallo, sowohl bei uns als auch beim Opa ist es über VoIP nicht möglich Ortsrufnummern anzurufen. Es kommt nach ...

Cloud-Dienste
PIM als SaaS Nutzungsgebühr
Frage von vanTastCloud-Dienste8 Kommentare

Moin, wir haben uns ein PIM (Product Information Management) nach unseren Ansprüchen für viel Geld als SaaS-Lösung bauen lassen. ...

Vmware
DOS 6.22 in VMWare mit CD-ROM
gelöst Frage von hesperVmware7 Kommentare

Hallo zusammen! Ich hab ein saublödes Problem. Es ist eine VMWare mit DOS 6.22 zu erstellen auf dem ein ...