WolleXPC Geschrieben 11. April 2007 Geschrieben 11. April 2007 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. Zitieren
MaddinMV Geschrieben 11. April 2007 Geschrieben 11. April 2007 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 Zitieren
WolleXPC Geschrieben 11. April 2007 Autor Geschrieben 11. April 2007 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. Zitieren
MaddinMV Geschrieben 11. April 2007 Geschrieben 11. April 2007 .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 Zitieren
WolleXPC Geschrieben 12. April 2007 Autor Geschrieben 12. April 2007 Entschuldige bitte, habe das Bild ganz vergessen. Es sollen nicht die 66 Zeichen vor dem 0,00 gelöscht werden sondern die ganze Zeile, wenn in der an 66. Stelle die Zeichenfolge 0,00 auftritt. Hier ist das Bild: LINK Zitieren
Reinhold Geschrieben 12. April 2007 Geschrieben 12. April 2007 ... Ü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 Zitieren
WolleXPC Geschrieben 12. April 2007 Autor Geschrieben 12. April 2007 Kannst du mir sagen wie das geht? Mit Excel kenn ich mich nur im groben aus. Weniger mit Formeln. Zitieren
Reinhold Geschrieben 13. April 2007 Geschrieben 13. April 2007 Kannst du mir sagen wie das geht? Mit Excel kenn ich mich nur im groben aus. Weniger mit Formeln. Wie machst du es denn bisher? Dann kann die bestimmt auch jemand sagen, wie du dein Script abändern musst. Reinhold :upps :upps Zitieren
WolleXPC Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 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. Zitieren
Reinhold Geschrieben 13. April 2007 Geschrieben 13. April 2007 Ich hab bisher gar nichts gemacht. Warum ist dann dein Computer eingeschaltet? :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 Zitieren
WolleXPC Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 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. Zitieren
Reinhold Geschrieben 13. April 2007 Geschrieben 13. April 2007 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 Zitieren
WolleXPC Geschrieben 13. April 2007 Autor Geschrieben 13. April 2007 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. Deswegen bitte ich ja um eure Hilfe. Zitieren
Reinhold Geschrieben 16. April 2007 Geschrieben 16. April 2007 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. Zitieren
WolleXPC Geschrieben 16. April 2007 Autor Geschrieben 16. April 2007 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? Zitieren
Reinhold Geschrieben 17. April 2007 Geschrieben 17. April 2007 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 Zitieren
WolleXPC Geschrieben 23. April 2007 Autor Geschrieben 23. April 2007 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. Zitieren
Reinhold Geschrieben 23. April 2007 Geschrieben 23. April 2007 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 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 Zitieren
Empfohlene Beiträge
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.