Zum Inhalt springen

VB Textstelle suchen und löschen


WolleXPC

Empfohlene Beiträge

Hallo zusammen,

ich benötige mal wieder Hilfe. Bin mit meinen kleinen Programmierkenntnissen am Ende.

Und zwar möchte ich ein Script schreiben welches eine Textdatei komplett durchsucht. Wenn an der 66. Stelle in jeder Zeile die Zeichenfolge: 0,00 steht, soll die komplette Zeile wo 0,00 steht gelöscht werden.

Es sollen keine Leerzeilen entstehen.

Welche Methode oder Funktion muss ich dafür benutzen?

Wäre Super wenn mir jemand das Script schreiben könnte.

Kenne leider nur die Replace Methode, aber mit der kann man ja nur suchen und ersetzen. Leider nicht suchen und löschen.

Ich danke euch im Vorraus für eure Bemühungen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi du,

ich weiss nicht ob du das so meinst, aber

das sucht halt die zeichenkette 0,00 und

löscht die 66 zeichen links davon und ersetzt 0,00 mit "" damit ist die komplette zeile weg und kein leerzeilchen^^

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

    .Text = "0,00"

    .Replacement.Text = ""

    .Forward = True

    .Wrap = wdFindContinue

    .Format = False

    .MatchCase = False

    .MatchWholeWord = True

    .MatchWildcards = False

    .MatchSoundsLike = False

    .MatchAllWordForms = False

End With


Selection.Find.Execute Replace:=wdReplaceAll

Selection.Delete Count:=-66

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke dir Maddin.

Was machen die ganzen "Match" "Sachen" da??? :)

Hab mal als Anhang ein Bild der Textdatei angehangen.

In der dritten Spalte (ca. 66. Stelle in der Zeile) findet ihr die "0,00".

Wenn dort 0,00 steht dann und in der vierten Spalte "0,00" soll die ganze Zeile gelöscht werden.

Der Hintergrund warum ich das mache, ist: Über eine Excel Tabelle wo Rechnungen aufgeführt werden habe ich über ein Script die Textdatei erstellt.

Manche Rechnungen die für den Monat nicht bezahlt werden, werden mit dem Betrag "0,00" aufgeführt. Und diese sollen raus.

Jetzt ist mir aber noch aufgefallen, dass die Zeile, wie oben genannt, nur gelöscht werden darf wenn auch in der 4. Spalte "0,00" steht.

Die drei rot markierten Zeilen (siehe Bild) müssen raus, weil in dritter und vierter Spalte "0,00" steht.

Vielen Dank für eure Hilfe.

Link zu diesem Kommentar
Auf anderen Seiten teilen


    .MatchWholeWord = false

so rum... ach ja, wo isn dein Anhang? ich hab das nur nebenbei gemacht, kann nicht für die Funktionalität im universellen einsatz garantieren :cool: wenn ich dein Anhang hab guck ich nochmal drüber morgen oder so kenn mich mit vb eigentlich auch 0 aus... matchxxx ist ein boolean wert ob er nur nach ganzen wörtern mit 0,00 suchen soll oder dergleichen^^ wichtig waren nur diese beiden sachen
Selection.Find.Execute Replace:=wdReplaceAll

Selection.Delete Count:=-66
das erste ersetzt halt das Wort:"0,00" mit "" und das zweite löscht 66 Zeichen nach links weg und ist damit auf 0 bzw -1 und zieht die zeile darunter hoch... ich hatte erst die funktion Selection.Backspace oder so gefunden, damit kannst du aber immer nur einzeichen löschen, müsstest dann also ne schleife rumlegen die das 66 mal macht, denke das
Selection.Delete Count:=-66

ist bissel edler

Link zu diesem Kommentar
Auf anderen Seiten teilen

... Über eine Excel Tabelle wo Rechnungen aufgeführt werden habe ich über ein Script die Textdatei erstellt.

Manche Rechnungen die für den Monat nicht bezahlt werden, werden mit dem Betrag "0,00" aufgeführt. Und diese sollen raus.

Jetzt ist mir aber noch aufgefallen, dass die Zeile, wie oben genannt, nur gelöscht werden darf wenn auch in der 4. Spalte "0,00" steht.

Die drei rot markierten Zeilen (siehe Bild) müssen raus, weil in dritter und vierter Spalte "0,00" steht.

Logisch wäre es doch, das Problem in Excel zu behandeln, also nur die Zeilen zu exportieren, die gebraucht werden. Ich befürchte, die versuchst das Problem an der falschen Stelle anzugehen.

hth

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab bisher gar nichts gemacht.

Die Person die bei uns die Rechnungen vebrucht, hat die Rechnungen alle in Excel eingegeben und einmal in dem Programm welches die Buchungen durchführt.

Man kann aber über eine Schnittstelle, Textdatei in das Programm einbinden, die der oben gezeigten Textdatei entsprechen müssen.

Ich habe den Auftrag bekommen, dass ich aus der Excel Tabelle eine Textdatei für die Schnittstelle basteln soll, die automatisch und richtig formatiert erstellt wird. Dies hab ich soweit geschafft. Jetzt sind nur die Rechnungen die für diesen Monat (deswegen Betrag 0.00) nicht bezahlt werden müssen aber vieleicht in einem anderen, in der Textdatei vorhanden. Und diese sollen gelöscht werden.

Aus einer Excel Tabelle wird die Textdatei erstellt. Diese Excel Tabelle bezieht sich mit Funktionen auf die Excel Tabelle die von der Finanzbuchhaltung erstellt wird, in der die Rechnungen alle aufgeführt werden. Sie dient nur dazu die Zahlen in richtiger Reihenfolge aufzulisten, damit ich das passende Format für die Schnittstelle erstellt bekomme.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab bisher gar nichts gemacht.

Warum ist dann dein Computer eingeschaltet? :D :D

Ich habe den Auftrag bekommen, dass ich aus der Excel Tabelle eine Textdatei für die Schnittstelle basteln soll...

Offenbar doch wohl über ein Script, oder? Du wirst schon verraten müssen, wir dein Script aussieht, sonst kann dir keiner helfen.

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kann euch mein bisheriges Script gerne geben, wofür weiß ich nicht, aber egal.

Sub Makro

Workbooks.Open Filename:= _

("C:\Dokumente und Einstellungen\kröll\Desktop\ARAP\Arap-V-2007.xls")

Windows("ARAP Stala Schnittstelle.xls").Activate

Sheets("ARAP Stala Schnittstelle").Select

ChDir "C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test"

ActiveWorkbook.SaveAs Filename:= _

"C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test\ARAP Stala Schnittstelle.csv" _

, FileFormat:=xlCSV, CreateBackup:=False

Sheets("Tabelle1").Select

Windows("ARAP-V-2007.xls").Activate

ActiveWindow.Close

ChDir "C:\Dokumente und Einstellungen\kröll\Desktop\ARAP"

ActiveWorkbook.SaveAs Filename:= _

"C:\Dokumente und Einstellungen\kröll\Desktop\ARAP\ARAP Stala Schnittstelle.xls" _

, FileFormat:=xlNormal, Password:="", WriteResPassword:="", _

ReadOnlyRecommended:=False, CreateBackup:=False

Set fso = CreateObject("Scripting.FileSystemObject")

Set f1 = fso.GetFile("C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test\Arap Stala Schnittstelle.csv")

f1.Move ("C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test\Arap1.txt")

'Replace Funktion, Löschen der Kommas

Dim quelle As String

Dim ziel As String

quelle = "C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test\arap1.txt"

ziel = "C:\Dokumente und Einstellungen\kröll\Desktop\Arap Test\arap2.txt"

Set fs = CreateObject("Scripting.FileSystemObject")

Set q = fs.OpenTextfile(quelle)

Set Z = fs.CreateTextFile(ziel, True)

Do Until q.AtEndOfStream

Z.WriteLine (Replace(q.ReadLine, ",", ""))

Loop

Z.Close

q.Close

fs.DeleteFile quelle

MsgBox "Schritt 1 wurde durchgeführt. Sie können nun weiter fortfahren."

End Sub

Dieses Script hab ich in Excel als Makro verbaut, welches per Button startet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Na bitte, da haben wir es doch schon: wenn du sowieso eine neue Datei schreibst, dann schreib halt nur die Zeilen raus, die du brauchst.

Do Until q.AtEndOfStream

' Hierhin gehört eine geniale Abfrage, ob du die Zeile brauchst

if ... then

Z.WriteLine (Replace(q.ReadLine, ",", ""))

' und hierhin das Ende der Abfrage

end if

Loop

Link zu diesem Kommentar
Auf anderen Seiten teilen

Aber ich weiß nicht wie ich so eine Suche in einer Datei nach 0.00 erstelle? Die Funktion soll ja auch noch die anderen Zeilen durchsuchen und dann die kopieren und in der anderen Datei euinfügen.

Im Prinzip so (ungetestet):


    Do Until q.AtEndOfStream

        zeile = Replace(q.ReadLine, ",", "")

        if mid( zeile, 66, 4) <> "0,00" ) then 

            Z.WriteLine ( zeile )

        end if

    Loop

Reinhold

PS: Ich habe nicht vor, deine Hausaufgaben zu machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich will auch nicht das hier jemand meine Hausaufgaben macht. Es sind ja noch nicht ma Hausaufgaben.

ICh wollte nur ein paar Tipps in vorm von ein paar Scriptzeilen die ich noch für mein Programm benötige.

Aber Vielen dank Reinhold für dein Script. Werde es nächste Woche ausprobieren weil ich leider vorher nicht zu komme.

Ist der Befehl "Z.Writeline (zeile)" dazu da die Zeile zu löschen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich will auch nicht das hier jemand meine Hausaufgaben macht. Es sind ja noch nicht ma Hausaufgaben.

Ist schon klar, allerdings kann ich nicht wirklich erkennen, das du selber irgendetwas unternimmst, um das Problem selbst zu lösen.

Ist der Befehl "Z.Writeline (zeile)" dazu da die Zeile zu löschen?


        if mid( zeile, 66, 4) <> "0,00" ) then 

            Z.WriteLine ( zeile )

        end if

Nein, wie in deinem Script auch (und wie der Name schon sagt) schreibt Writeline in die Datei. Die Bedingung vorher verhindert, dass die Zeilen, in denen ab der 66. Stelle die nächsten 4 Zeichen "0,00" sind, auch in die Datei geschrieben werden.

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ist schon klar, allerdings kann ich nicht wirklich erkennen, das du selber irgendetwas unternimmst, um das Problem selbst zu lösen.

Ich such schon seit Wochen nach Scripten die mir helfen könnten.

Leider find ich nichts. Das wird wohl daran liegen, dass ich mich zu wenig damit auskenne.

Leider funktioniert dein Teil Script nicht 100%.

Musste es noch ein wenig bearbeiten.

So sieht es jetzt aus.

Set fs = CreateObject("Scripting.FileSystemObject")

    Set q = fs.OpenTextfile(quelle)

    Set Z = fs.CreateTextFile(ziel, True)


    'Do Until q.AtEndOfStream

     '   Z.WriteLine (Replace(q.ReadLine, ",", ""))

     '   Dim mid

      '  if mid(zeile, 66, 4) <> "0,00" )Then

       '     Z.WriteLine (zeile)

        'End If


   ' Loop    

    Do Until q.AtEndOfStream

        Dim zeile

        zeile = Replace(q.ReadLine, ",", "")

        If mid(zeile, 66, 4) <> "0,00" Then

            Z.WriteLine (zeile)

        End If

    Loop


    Z.Close

    q.Close


    fs.DeleteFile quelle



    MsgBox "Schritt 1 wurde durchgeführt. Sie können nun weiter fortfahren."

Hab ich zuviel verändert?

Zurzeit macht das Script nicht mehr als sonst.

Was mir noch aufgefallen ist, dass das Script die Zeile nur löschen soll, wenn an Stelle 66 der Zeile UND AN STELLE 87 die Zeichenfolge "0,00" auftritt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Leider find ich nichts. Das wird wohl daran liegen, dass ich mich zu wenig damit auskenne.

Macht ja nix, du bist vermutlich hier, um etwas dazu zu lernen.


    Do Until q.AtEndOfStream

        Dim zeile

        zeile = Replace(q.ReadLine, ",", "")

        If mid(zeile, 66, 4) <> "0,00" Then

            Z.WriteLine (zeile)

        End If

    Loop

 

.....

Was mir noch aufgefallen ist, dass das Script die Zeile nur löschen soll, wenn an Stelle 66 der Zeile UND AN STELLE 87 die Zeichenfolge "0,00" auftritt.

Hast du eigentlich verstanden was du da tust? Oder woher kommt dieses Script. Wahrscheinlich programmierst du objektorientiert und hast es von einem Kollegen geerbt. :D :D

mit (Achtung, wie immer ungetestet)

If mid(zeile, 66, 4) <> "0,00" and mid(zeile, 87, 4) <> "0,00" Then

könntest du etwas weiter kommen. Aber besser wäre es, das mit dem

Replace(q.ReadLine, ",", "")

zu überdenken. Wenn du vor dem if die Kommas rausschmeißt, dann wird das mit der Bedingung so sicher nichts mehr.

Davon unabhängig habe ich den Eindruck, dass du dich nicht mit der Materie beschäftigst, sondern nur einen Deppen suchst, der dir deine Arbeit abnimmt.

Für mich ist hier jedenfalls Ende.

Reinhold

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...