Zeichen per Batch in Textdatei suchen und vergleichen
Hallo zusammen,
ich könnte Hilfe brauchen. Ich möchte in einer Textdatei per Batch eine neue Zeile einfügen. Die Herausforderug ist es, die richtige Zeile zu finden, unter der die neue Zeile eingefügt werden kann.
Z.B. möchte ich einen neuen Account "joshi" anlegen. Ich suche in der vorhandenen Beispieldatei nach Einträgen mit "j", und unter dieser gefundenen Zeile soll eine neue Zeile eingefügt werden.
Hab diese Vorgänge-ähnlich wie beim Struktugramm- einmal zusammen gefasst:
Suche in Zeile 34 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche in Zeile 35 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche in Zeile 36 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
bis Zeile 118
Suche in Zeile 118 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche von "neueraccountname" z.B. joshi den ersten Buchstaben (J) und speichere ihn in neue Variable
Suche von "neueraccountname" z.B. joshi den zweiten Buchstaben (o) und speichere ihn in neue Variable
Suche von "neueraccountname" z.B. joshi den dritten Buchstaben (s) und speichere ihn in neue Variable
Vergleiche den ersten Buchstabe von "neueraccountname" z.B. j für joshi mit den Variablen des Suchergebnis
der Zeilen 34 - 118 in der Spalte 75. Suche die Zeile in Spalte 75, wo sich ein "j" befindet.
Szenario 1: Keine Übereinstimmung, es existiert kein Account mit j
Ist der erste Buchstabe von "neueraccountname" (z.B. joshi) in keiner der Zeilen 34-118 in Spalte 75
identisch (wenn z.B. kein Accountname mit "j" beginnt), dann suche die Zeile wo sich der Buchstabe
vor "j" im Alphabet befindet, der vor dem ersten Buchstaben des accounts liegt.
Z.B. "i" liegt im Alphabet vor "j". Suche die Zeile in Spalte 75, wo sich der letzte Eintrag mit "i" befindet.
Dann ist die gesuchte neue Zeile=letzte Eintrag in Zeile mit "i" + 1.
Szenario 2: Eine Übereinstimmung, es existiert bereits ein Account mit J
Ist der erste Buchstabe von "neueraccountname" (z.B. joshi) jedoch in einer der Zeilen 34-118 in Spalte 75
identisch, suche die Zeile wo sich der Buchstabe befindet.
Dann ist die gesuchte neue Zeile=Zeile des Suchergebnisses + 1.
Szenario 3: Zwei Übereinstimmungen, es existiert bereits ein Account mit jo
Vergleiche den ersten und zweiten Buchstaben von "neueraccountname" mit Ergebnis der Zeichensuche aus Spalte 75 und 76.
Suche die
Zeilennummer der Übereinstimmung des ersten und zweiten Buchstabens und geb die Zeilennummer raus.
Dann ist die gesuchte neue Zeile=Zeilennummer + 1.
Szenario 4: Drei Übereinstimmungen, es existiert bereits ein Account mit jos
Vergleiche den ersten, zweiten und dritten Buchstaben von "neueraccountname" (jos) mit Ergebnis der
Zeichensuche aus Spalte 75,76 und 77.
Suche die Zeilennummer der Übereinstimmung des ersten, zweiten und dritten Buchstabens
und geb die Zeilennummer raus. Dann ist die gesuchte neue Zeile=Zeilennummer + 1.
Gibt es per Batch eine Art array wie bei anderen Scriptsprachen?
Danke für deine Hilfe
LG
Dirk
ich könnte Hilfe brauchen. Ich möchte in einer Textdatei per Batch eine neue Zeile einfügen. Die Herausforderug ist es, die richtige Zeile zu finden, unter der die neue Zeile eingefügt werden kann.
Z.B. möchte ich einen neuen Account "joshi" anlegen. Ich suche in der vorhandenen Beispieldatei nach Einträgen mit "j", und unter dieser gefundenen Zeile soll eine neue Zeile eingefügt werden.
Hab diese Vorgänge-ähnlich wie beim Struktugramm- einmal zusammen gefasst:
Suche in Zeile 34 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche in Zeile 35 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche in Zeile 36 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
bis Zeile 118
Suche in Zeile 118 und Spalte 75, 76 und 77 jeweils die Zeichen und übergebe jedes in eine Variable
Suche von "neueraccountname" z.B. joshi den ersten Buchstaben (J) und speichere ihn in neue Variable
Suche von "neueraccountname" z.B. joshi den zweiten Buchstaben (o) und speichere ihn in neue Variable
Suche von "neueraccountname" z.B. joshi den dritten Buchstaben (s) und speichere ihn in neue Variable
Vergleiche den ersten Buchstabe von "neueraccountname" z.B. j für joshi mit den Variablen des Suchergebnis
der Zeilen 34 - 118 in der Spalte 75. Suche die Zeile in Spalte 75, wo sich ein "j" befindet.
Szenario 1: Keine Übereinstimmung, es existiert kein Account mit j
Ist der erste Buchstabe von "neueraccountname" (z.B. joshi) in keiner der Zeilen 34-118 in Spalte 75
identisch (wenn z.B. kein Accountname mit "j" beginnt), dann suche die Zeile wo sich der Buchstabe
vor "j" im Alphabet befindet, der vor dem ersten Buchstaben des accounts liegt.
Z.B. "i" liegt im Alphabet vor "j". Suche die Zeile in Spalte 75, wo sich der letzte Eintrag mit "i" befindet.
Dann ist die gesuchte neue Zeile=letzte Eintrag in Zeile mit "i" + 1.
Szenario 2: Eine Übereinstimmung, es existiert bereits ein Account mit J
Ist der erste Buchstabe von "neueraccountname" (z.B. joshi) jedoch in einer der Zeilen 34-118 in Spalte 75
identisch, suche die Zeile wo sich der Buchstabe befindet.
Dann ist die gesuchte neue Zeile=Zeile des Suchergebnisses + 1.
Szenario 3: Zwei Übereinstimmungen, es existiert bereits ein Account mit jo
Vergleiche den ersten und zweiten Buchstaben von "neueraccountname" mit Ergebnis der Zeichensuche aus Spalte 75 und 76.
Suche die
Zeilennummer der Übereinstimmung des ersten und zweiten Buchstabens und geb die Zeilennummer raus.
Dann ist die gesuchte neue Zeile=Zeilennummer + 1.
Szenario 4: Drei Übereinstimmungen, es existiert bereits ein Account mit jos
Vergleiche den ersten, zweiten und dritten Buchstaben von "neueraccountname" (jos) mit Ergebnis der
Zeichensuche aus Spalte 75,76 und 77.
Suche die Zeilennummer der Übereinstimmung des ersten, zweiten und dritten Buchstabens
und geb die Zeilennummer raus. Dann ist die gesuchte neue Zeile=Zeilennummer + 1.
Gibt es per Batch eine Art array wie bei anderen Scriptsprachen?
Danke für deine Hilfe
LG
Dirk
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 380442
Url: https://administrator.de/contentid/380442
Ausgedruckt am: 19.03.2024 um 06:03 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
statt solcher Klimmzüge zur Sortierung einer CSV-Datei mit Batchscript zu machen, würde ich Dir empfehlen, Dich mit Excel-VBA bzw. mit der "Fernsteuerung" von Excel per VBScript zu beschäftigen. Batchscript ist zur Verarbeitung von Textdateien nur bedingt geeignet, und wenn eine Textdatei nicht in der Zeichencodierung OEM-850 gespeichert ist (wird in Deinem Fall wohl so sein), sollte man auf jeden Fall die Finger davon lassen.
Excel hat eine eingebaute Sortierfunktion, die sogar drei Spalten beim Sortieren berücksichtigen kann. Zu finden ist das beim Range-Objekt in der Sort-Methode.
Zum Laden der CSV-Datei in Excel musst Du zuerst mit
eine Excel-Instanz starten und mit
die CSV-Datei öffnen. Mit
erhälst Du das aktive Arbeitsblatt. Nachdem Du eine neue Zeile mit den Daten des neuen Benutzers in das Arbeitsblatt eingefügt hast, kannst Du ein Range-Objekt auf dem Arbeitsblatt definieren (s.o.) und dessen Sort-Methode anwenden. Dann noch speichern und mit
Excel schließen - fertig.
Um beim Öffnen der CSV-Datei genauere Vorgaben bzgl. Trennzeichen, Spaltentitel, usw. machen zu können, kann man die Datei auch folgendermaßen laden:
Grüße
Friemler
statt solcher Klimmzüge zur Sortierung einer CSV-Datei mit Batchscript zu machen, würde ich Dir empfehlen, Dich mit Excel-VBA bzw. mit der "Fernsteuerung" von Excel per VBScript zu beschäftigen. Batchscript ist zur Verarbeitung von Textdateien nur bedingt geeignet, und wenn eine Textdatei nicht in der Zeichencodierung OEM-850 gespeichert ist (wird in Deinem Fall wohl so sein), sollte man auf jeden Fall die Finger davon lassen.
Excel hat eine eingebaute Sortierfunktion, die sogar drei Spalten beim Sortieren berücksichtigen kann. Zu finden ist das beim Range-Objekt in der Sort-Methode.
Zum Laden der CSV-Datei in Excel musst Du zuerst mit
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
Set objActiveWorkBook = objExcel.WorkBooks.Open("C:\Temp\MeineDatei.csv",,,,,,,,,,,,, True)
Set objActiveSheet = objActiveWorkBook.WorkSheets(1)
objExcel.Quit
Um beim Öffnen der CSV-Datei genauere Vorgaben bzgl. Trennzeichen, Spaltentitel, usw. machen zu können, kann man die Datei auch folgendermaßen laden:
Set objActiveWorkBook = objExcel.WorkBooks.Add(-4167)
Set objActiveSheet = objActiveWorkBook.WorkSheets(1)
With objActiveSheet.QueryTables.Add("TEXT;C:\Temp\MeineDatei.csv", objActiveSheet.Range("A1"))
' Kleine Auswahl der möglichen Parameter
.FieldNames = True 'Erste Zeile enthält Spaltentitel
.TextFileConsecutiveDelimiter = False 'Aufeinanderfolgende Trennzeichen nicht als ein Trennzeichen behandeln
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True 'Das Feld-Trennzeichen ist Semikolon
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
' Datei laden
Call .Refresh(False)
End With
Grüße
Friemler