FINDSTR Befehl für strikt aufeinanderfolgende Sequenzelementen
Hallo,
gibt's eine Möglichkeit mit dem "findstr" Befehl die Sequenz ("Benutzername: ABC " (ohne die 1 am Ende, und auch wenn möglicherweise Leerzeichen dazwischen liegen) in der folgenden Struktur eindeutig zu erkennen?
Benutzername : ABC1
Die Sequenz soll aber in der Struktur
Benutzername : FGH ABC1
nicht gefunden werden. Also die Sequenzelementen müssen strikt nacheinander gefunden werden
Freue mich über jeden Hinweis
Grüße
dedalus2011
gibt's eine Möglichkeit mit dem "findstr" Befehl die Sequenz ("Benutzername: ABC " (ohne die 1 am Ende, und auch wenn möglicherweise Leerzeichen dazwischen liegen) in der folgenden Struktur eindeutig zu erkennen?
Benutzername : ABC1
Die Sequenz soll aber in der Struktur
Benutzername : FGH ABC1
nicht gefunden werden. Also die Sequenzelementen müssen strikt nacheinander gefunden werden
Freue mich über jeden Hinweis
Grüße
dedalus2011
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 183125
Url: https://administrator.de/contentid/183125
Ausgedruckt am: 24.11.2024 um 05:11 Uhr
23 Kommentare
Neuester Kommentar
Hallo dedalus2011!
Soferne Du nicht ein zusätzliches "
bzw
Grüße
bastla
Soferne Du nicht ein zusätzliches "
/x
" oder "/e
" verwendest, sollte das funktionieren:D:>echo Benutzername : ABC1 |findstr /c:"Benutzername : ABC"
Benutzername : ABC1
D:\>echo Benutzername : FGH ABC1 |findstr /c:"Benutzername : ABC"
D:\>
D:\>type Text.txt
gibt's eine M÷glichkeit mit dem "findstr" Befehl die Sequenz ("Benutzername: ABC
" (ohne die 1 am Ende, und auch wenn m÷glicherweise Leerzeichen dazwischen lieg
en) in der folgenden Struktur eindeutig zu erkennen?
Benutzername : ABC1
Die Sequenz soll aber in der Struktur
Benutzername : FGH ABC1
D:\>findstr /c:"Benutzername : ABC" Text.txt
Benutzername : ABC1
D:\>
bastla
Alternativ dazu vielleicht ne gebrauchte Cray?
Oder einen 476-Teile-Chrom-Vanadium-Knarrenkasten aus dem örtlichen Profi-Baumarkt?
Du hast schon "die Anforderung" gelesen und das zwischen den Zeilen stehende "Ich möchte vor der nächsten Steuerrreform fertig werden!" ?
Immer wieder erstaunt ob der Vielfältigkeit der Lösungsansätze dieses Forums
Biber
Oder einen 476-Teile-Chrom-Vanadium-Knarrenkasten aus dem örtlichen Profi-Baumarkt?
Du hast schon "die Anforderung" gelesen und das zwischen den Zeilen stehende "Ich möchte vor der nächsten Steuerrreform fertig werden!" ?
Immer wieder erstaunt ob der Vielfältigkeit der Lösungsansätze dieses Forums
Biber
Zitat von @Biber:
> Zitat von @Weiricth:
> ----
> lad dir doch Visual Studio Express runter und machs in VB.Net und gut ist
Alternativ dazu vielleicht ne gebrauchte Cray?
Oder einen 476-Teile-Chrom-Vanadium-Knarrenkassen vom örtlichen Profi-Baumarkt?
Du hast schon "die Anforderung" gelesen und das zwischen den Zeilen stehende "Ich möchte vor der nächsten
Steuerrreform fertig werden!" ?
Immer wieder erstaunt ob der Vielfältigkeit der Lösungsansätze dieses Forums
Biber
> Zitat von @Weiricth:
> ----
> lad dir doch Visual Studio Express runter und machs in VB.Net und gut ist
Alternativ dazu vielleicht ne gebrauchte Cray?
Oder einen 476-Teile-Chrom-Vanadium-Knarrenkassen vom örtlichen Profi-Baumarkt?
Du hast schon "die Anforderung" gelesen und das zwischen den Zeilen stehende "Ich möchte vor der nächsten
Steuerrreform fertig werden!" ?
Immer wieder erstaunt ob der Vielfältigkeit der Lösungsansätze dieses Forums
Biber
ja stell dir vor lesen kann ich. Ich finds eher erstaunlich das es dann leute gibt die dann dumme posts machen. aber zurück zu kommen
das ist ein zweizeiler in vb.net. desweitern ist die Performance um ein wesentliches erhöht, und kein dummer anwender kann im script rumwurschteln. Und wenn jemand sowas in batch macht hat er schon so viel verstand das er es auch in vb.net hin bekommt.
@Weiricth
Grüße
bastla
das ist ein zweizeiler in vb.net
Wäre doch nett von Dir, wenn Du dedalus2011 diese beiden Zeilen auch anbieten würdest ... Grüße
bastla
ok wenns mann verkaufs fertig programmiert sinds mehr zeilen. aber hier das komplette modul.
Imports System.IO
Module Module1
Dim p_text As String()
Dim p_DateinameInklPfad As String
Sub Main()
Dim zeile As Integer = 0
Dim suchtext As String = ""
p_DateinameInklPfad = "C:\test.txt"
lesen()
For i As Integer = 0 To p_text.Length - 1 Step 1
If p_text(i).IndexOf(suchtext) > 0 Then
zeile = i
'etweder mit exit oder ausgabe aller
Console.WriteLine(p_text(i))
Exit For
End If
Next
End Sub
Public Sub lesen(Optional ByVal ToLower As Boolean = False, Optional ByVal ToUpper As Boolean = False)
ReDim Preserve p_text(0)
p_text(0) = "false"
Try
' --- Datei öffnen
Dim fs As FileStream = New FileStream(p_DateinameInklPfad, FileMode.OpenOrCreate, FileAccess.ReadWrite)
' --- Stream öffnen
Dim r As StreamReader = New StreamReader(fs)
' --- Zeiger auf den Anfang
r.BaseStream.Seek(0, SeekOrigin.Begin)
' --- Alle Zeilen lesen und an Console ausgeben
Dim i As Integer = 0
While r.Peek() > -1
ReDim Preserve p_text(i)
p_text(i) = r.ReadLine()
If ToLower Then
p_text(i).ToLower()
End If
If ToUpper Then
p_text(i).ToUpper()
End If
i = i + 1
End While
' --- Reader und Stream schließen
r.Close()
fs.Close()
Catch ex As Exception
' txtDatei_Logfile_Schreiben(ex.Message, txt_Logfile)
End Try
End Sub
End Module
Hallo Weiricth!
Falls Du doch noch ein paar Zeilen einsparen möchtest:
Was mir etwas fehlt, ist die Berücksichtigung der variablen Anzahl an Leerzeichen im Suchtext - Stichwort "RegEx"...
Grüße
bastla
Falls Du doch noch ein paar Zeilen einsparen möchtest:
- Die Variable "zeile" wird nicht wirklich verwendet.
- Anstelle des zeilenweisen Einlesens und der Verwendung von "
ReDim
" böte sich ein Einlesen "am Stück" und ein "Split
" anhand der Zeilenschaltungen an.
Was mir etwas fehlt, ist die Berücksichtigung der variablen Anzahl an Leerzeichen im Suchtext - Stichwort "RegEx"...
Grüße
bastla
Hi !
Ui da hat aber einer Humor mit dem Schöpflöffel inhaliert.... :-P
Mhhh c++ wäre ja auch noch eine Möglichkeit, wobei ich eher für Delphi.net wäre aber ob das mit echten zwei Zeilen klappt....Nee, die bräuchte schon für die Deklaration....Egal...
mrtux
Zitat von @Weiricth:
ja stell dir vor lesen kann ich. Ich finds eher erstaunlich das es dann leute gibt die dann dumme posts machen. aber zurück
zu kommen
ja stell dir vor lesen kann ich. Ich finds eher erstaunlich das es dann leute gibt die dann dumme posts machen. aber zurück
zu kommen
Ui da hat aber einer Humor mit dem Schöpflöffel inhaliert.... :-P
Mhhh c++ wäre ja auch noch eine Möglichkeit, wobei ich eher für Delphi.net wäre aber ob das mit echten zwei Zeilen klappt....Nee, die bräuchte schon für die Deklaration....Egal...
mrtux
die var zeile ist weil mir nicht klar ist ob er noch weiter machen möchte deshalb speicher ich diese raus .
des redim kommt bei mir aus ner funktion bzw klasse raus. Das grund lesen kommt von google da hab ich jetzt nicht nachgeschaut bzw. verbessert.
Bezüglich RegEx hab ich grad nicht dran gedacht hier geändert
des redim kommt bei mir aus ner funktion bzw klasse raus. Das grund lesen kommt von google da hab ich jetzt nicht nachgeschaut bzw. verbessert.
Bezüglich RegEx hab ich grad nicht dran gedacht hier geändert
Sub Main()
Dim zeile As Integer = 0
Dim suchtext As String = "Benutzername"
Dim suchtext As String = "ABC"
p_DateinameInklPfad = "C:\test.txt"
lesen()
For i As Integer = 0 To p_text.Length - 1 Step 1
If p_text(i).IndexOf(suchtext) > 0 and p_text(i).IndexOf(suchtext2) > 0 Then
zeile = i
'etweder mit exit oder ausgabe aller
Console.WriteLine(p_text(i))
Exit For
End If
Next
End Sub
es ist zu spät zum denken
den RegEx must jemand ander machen da bin ich nicht fit drin.
Sub Main()
Dim zeile As Integer = 0
Dim myRegex As New Regex("")
Dim suchtext As String = ""
p_DateinameInklPfad = "C:\test.txt"
lesen()
For i As Integer = 0 To p_text.Length - 1 Step 1
If myRegex.IsMatch(p_text(i)) Then
zeile = i
'etweder mit exit oder ausgabe aller
Console.WriteLine(p_text(i))
Exit For
End If
Next
End Sub
den RegEx must jemand ander machen da bin ich nicht fit drin.
... und dat is' jetzt schneller geschrieben als
Glückwunsch, jetzt weiß ich, warum einige Programmierer Fantasiekosten aufrufen, wenn die alle so arbeiten *gröhl*
zwei Zeilen ... das komplette Modul >50 Zeilen, ah hätte der TE auch schneller hinbekommen als die Batchdatei zu schreiben *Kopf nick* ... + Downloadzeit + Installationszeit ... jepp, hätte sich gelohnt, kaum mehr Aufwand
was für Leute hier rumeiern, unfassbar ... und am Ende kann er das Problem nicht einmal vollends lösen ...
findstr /i /r /c: Benutzername *: *ABC
, habe ich das richtig verstanden, ja?Glückwunsch, jetzt weiß ich, warum einige Programmierer Fantasiekosten aufrufen, wenn die alle so arbeiten *gröhl*
zwei Zeilen ... das komplette Modul >50 Zeilen, ah hätte der TE auch schneller hinbekommen als die Batchdatei zu schreiben *Kopf nick* ... + Downloadzeit + Installationszeit ... jepp, hätte sich gelohnt, kaum mehr Aufwand
was für Leute hier rumeiern, unfassbar ... und am Ende kann er das Problem nicht einmal vollends lösen ...
Zitat von @Weiricth:
ja stell dir vor lesen kann ich. Ich finds eher erstaunlich das es dann leute gibt die dann dumme posts machen.
ja stell dir vor lesen kann ich. Ich finds eher erstaunlich das es dann leute gibt die dann dumme posts machen.
Fragt sich, wer hier "dumme posts" macht.
Typischer Fall von BTW5.
1. Leute der will doch garantiert mehr als nur Findstr in seiner dummen batch datei machen und da wird er schnell aufs ende stoßen, bzw. die arbeit die er ins eine script gesteckt hat kann er nicht so einfach ins nächste übernehmen.
2. wissen wir nicht auf wievielen rechnern er es einsetzen will, welches unterschiedlichen OS Stände die haben etc.
3. Sieht sich des mit Benutzername und Sequenz sehr nach versuch der Authentifiziertung aus, und dann kann jeder drin rumpfuschen.
@Skyemugen: ja 50 zeichen weil das Modul schon fertige funktionen hat zu wieder verwendung was mann im Internet gleich finden kann. Das eigentliche Program hat gerade mal 15 zeilen und dabei sind die zeilen die VS auto erstellt schon dabei. Zum Thema Kosten, bzw download etc. wenn man sieht das ich nicht mal 10 min für das Programm gebraucht habe (siehe post zeit) aber dedalus über 3 Std für dann eine entgültige lösung gebraucht hat frag ich mich wer hat sich hier was gespart.
2. wissen wir nicht auf wievielen rechnern er es einsetzen will, welches unterschiedlichen OS Stände die haben etc.
3. Sieht sich des mit Benutzername und Sequenz sehr nach versuch der Authentifiziertung aus, und dann kann jeder drin rumpfuschen.
@Skyemugen: ja 50 zeichen weil das Modul schon fertige funktionen hat zu wieder verwendung was mann im Internet gleich finden kann. Das eigentliche Program hat gerade mal 15 zeilen und dabei sind die zeilen die VS auto erstellt schon dabei. Zum Thema Kosten, bzw download etc. wenn man sieht das ich nicht mal 10 min für das Programm gebraucht habe (siehe post zeit) aber dedalus über 3 Std für dann eine entgültige lösung gebraucht hat frag ich mich wer hat sich hier was gespart.
zu 1.) Bullshit, wenn man keine Ahnung hat ... der kommt so oder so wenn dann hier her, da nutzen ihm VB.Net Schnipsel noch weniger
zu 2.) Wayne, die Batch rennt auf mehr Windows-Systemen (Windows 95? SBS 2011? ... was immer belieben) als eine aus VB.Net erstellte .exe, die dann erst einmal .NET Framework 1.1 voraussetzt
zu 3.) nicht unser Problem, wenn wir jedes Mal darauf eingehen würden, im Batch-Bereich, hätten wir so einiges nicht geschnipselt, die Meisten wollen nur auslesen und für .csv XYZ tabellarisch aufführen ...
Ja, wer hat hier was gespart, 10min für ein Programm (ohne Download- und Installationszeit), das der TE auch nicht hinbekommen hätte und hier 3 Stunden eine endgültige Lösung gesucht hätte ... oder 27 Sekunden für eine Batchzeile, folgend aus einer anderen ... 3 Stunden, weil's kein Live-Chat-Support ist und weder der TE noch wir instant-messages raushauen ...
Mann, was willst du uns erzählen? Dein Zwei-Zeilen-Spruch war schon Gepose genug, darfst dich wieder aus dem Batch-Bereich entfernen.
zu 2.) Wayne, die Batch rennt auf mehr Windows-Systemen (Windows 95? SBS 2011? ... was immer belieben) als eine aus VB.Net erstellte .exe, die dann erst einmal .NET Framework 1.1 voraussetzt
zu 3.) nicht unser Problem, wenn wir jedes Mal darauf eingehen würden, im Batch-Bereich, hätten wir so einiges nicht geschnipselt, die Meisten wollen nur auslesen und für .csv XYZ tabellarisch aufführen ...
Ja, wer hat hier was gespart, 10min für ein Programm (ohne Download- und Installationszeit), das der TE auch nicht hinbekommen hätte und hier 3 Stunden eine endgültige Lösung gesucht hätte ... oder 27 Sekunden für eine Batchzeile, folgend aus einer anderen ... 3 Stunden, weil's kein Live-Chat-Support ist und weder der TE noch wir instant-messages raushauen ...
Mann, was willst du uns erzählen? Dein Zwei-Zeilen-Spruch war schon Gepose genug, darfst dich wieder aus dem Batch-Bereich entfernen.
Hallo Skye!
Dass Du Dich gar so echauffieren magst ...
Abseits der vollmundigen Ansage von Weiricth ließe sich das natürlich durchaus mit nur ein paar Codezeilen umsetzen - etwa:
wobei allerdings noch zumindest für die Aufrufparameter Überprüfung/Errorhandling zu ergänzen wäre ...
Was noch hinzukäme: Ich mag nicht glauben (aber auch nicht testen ), dass sich damit gegenüber einem "
[Edit] Um aber zumindest noch einen Vorteil zu nennen: Mit einer leichten Modifikation würde das Ergebnis nicht mehr ganze Zeilen, sondern nur noch die dem Suchbegriff entsprechenden Strings umfassen:
Aufzurufen wäre dann mit dem Suchbegriff
um als Ergebnis "Benutzername : " + Leerzeichen + ABC" + alle bis zum nächsten "Whitespace" (also Leerzeichen, TAB, Zeilenschaltung) folgenden Zeichen zu erhalten.
Auch "Benutzername :" und die folgenden Leerzeichen ließen sich durch Verwendung eines SubMatches noch leicht eliminieren:
und Suchbegriff
[/Edit]
Grüße
bastla
Dass Du Dich gar so echauffieren magst ...
Abseits der vollmundigen Ansage von Weiricth ließe sich das natürlich durchaus mit nur ein paar Codezeilen umsetzen - etwa:
Sub Main(ByVal Args As String())
Dim suchtext As String = Args(0)
Dim p_DateinameInklPfad As String = Args(1)
Dim p_text As String()
Try
p_text = Split(My.Computer.FileSystem.ReadAllText(p_DateinameInklPfad), vbNewLine)
Catch ex As Exception
Environment.ExitCode = 1
Exit Sub
End Try
Dim myRegex As New System.Text.RegularExpressions.Regex(suchtext)
For i As Integer = 0 To p_text.Length - 1
If myRegex.IsMatch(p_text(i)) Then Console.WriteLine(p_text(i))
Next
End Sub
Was noch hinzukäme: Ich mag nicht glauben (aber auch nicht testen ), dass sich damit gegenüber einem "
findstr
" tatsächlich eine bessere Performance erzielen ließe ...[Edit] Um aber zumindest noch einen Vorteil zu nennen: Mit einer leichten Modifikation würde das Ergebnis nicht mehr ganze Zeilen, sondern nur noch die dem Suchbegriff entsprechenden Strings umfassen:
Sub Main(ByVal Args As String())
Dim suchtext As String = Args(0)
Dim p_DateinameInklPfad As String = Args(1)
Dim p_text As String
Try
p_text = My.Computer.FileSystem.ReadAllText(p_DateinameInklPfad)
Catch ex As Exception
Environment.ExitCode = 1
Exit Sub
End Try
Dim myRegex As New System.Text.RegularExpressions.Regex(suchtext)
For Each Match In myRegex.Matches(p_text)
Console.WriteLine(Match)
Next
End Sub
"Benutzername : *ABC\S*"
Auch "Benutzername :" und die folgenden Leerzeichen ließen sich durch Verwendung eines SubMatches noch leicht eliminieren:
Console.WriteLine(Match.Groups(1))
"Benutzername : *(ABC\S*)"
Grüße
bastla