Autor |
Beitrag |
kmkhl
      
Beiträge: 28
Erhaltene Danke: 3
Win 95, Win XP, Win Vista, Win 7, Win 8, Win 8.1
Visual Basic, C#, PHP
|
Verfasst: Di 15.10.13 16:25
Hallo
ich lese mit einem Streamreader Zeile für Zeile ein rtf Dokument.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| StreamReader reader = new StreamReader(Path.Combine(pfad));
while ((line = reader.ReadLine()) != null) { if (line.Contains("hallo")) { string ausgabe = line; } }
MessageBox.Show(ausgabe); |
Das Ergebnis sieht dann ungefähr so aus:
\pard\keepn\wodctlpar\s1\sb240[...]hallo\cf2\kerning0\[...]
Ich würde aber gerne nur das 'hallo' aus der Zeile angezeigt bekommen.
Ich habe jetzt auch schon mit 'Replace' und 'Regex' rumgespielt, aber das macht Probleme aufgrund der Backslashs und ich denke das es doch auch weniger umständlich geht, oder?
Danke für Eure Hilfe!
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 15.10.13 16:36
|
|
kmkhl 
      
Beiträge: 28
Erhaltene Danke: 3
Win 95, Win XP, Win Vista, Win 7, Win 8, Win 8.1
Visual Basic, C#, PHP
|
Verfasst: Di 15.10.13 16:47
nein das war ja nur eine vereinfachte Darstellung von meinem Code.
In meinem richtigen Code ist 'hallo' = 'Autonummer' und die Nummer die hinter 'Autonummer' steht unterscheidet sich natürlich immer. Die brauche ich.
Würde also wie gewollt nur 'Autonummer 00.00.00' angezeigt werden, hätte ich kein Problem. Stattdessen kommt \
pard\keepn\wodctlpar\s1\sb240[...]Autonummer 00.00.00\cf2\kerning0\[...]

|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 15.10.13 17:05
C#-Quelltext 1: 2: 3: 4: 5: 6:
| string text = File.ReadAllText(Path.Combine(pfad)); Regex regex = new Regex(@"Autonummer\s\d{2}\.\d{2}\.\d{2}"); foreach (Match match in regex.Matches(text)) { MessageBox.Show(match.Value); } |
|
|
kmkhl 
      
Beiträge: 28
Erhaltene Danke: 3
Win 95, Win XP, Win Vista, Win 7, Win 8, Win 8.1
Visual Basic, C#, PHP
|
Verfasst: Di 15.10.13 17:28
das haut nicht hin. Er zeigt nichts
Edit: das haut hin. Er zeigt was an.
Allerdings kann die Zahlenfolge unterschiedlich sein...
Beispiel:
Autonummer 1.2.3
Autonummer 1.2.33
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 15.10.13 17:47
Tja ohne ~genaue~ Definition was da kommen kann gibt es auch keinen passenden Regex
Probier mal folgendes das würde zumindest deine Beispiele matchen.
C#-Quelltext 1:
| Regex regex = new Regex(@"Autonummer\s\d{1,2}\.\d{1,2}\.\d{1,2}"); |
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 15.10.13 17:51
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: kmkhl
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 15.10.13 19:39
Wie genau kann die Zeichenfolge denn aussehen?
Ist sicher, dass es immer zwei Zahlen in Folge, getrennt durch Punkte sind, oder irgendwas Anderes?
Das einzige, was mir da noch einfällt, wäre, dass du alle Zeichenketten ausgeben lässt, die zwischen "Autonummer" und dem ersten darauf folgenden Backslash stehen.
Leider bin ich in Regex nicht fit genug um das mal eben so hin zu schreiben, aber vielleicht hilft die Idee ja schon weiter.
@ Frühlingsrolle:
Den Sinn hinter deiner Methode verstehe ich nicht so ganz.
Am einfachsten ist das Auslesen von Zeilen aus einer Datei wahrscheinlich diese Methode: File.ReadLines
Allerdings ist ja auch das Hauptproblem, dass er eine bestimmte Nummer an einer bestimmten Stelle in jeder Zeile finden möchte, oder habe ich da was falsch verstanden?
|
|
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 15.10.13 19:59
- Nachträglich durch die Entwickler-Ecke gelöscht -
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 15.10.13 20:11
Für mich sieht das nach einem Pfad aus.
Naja, lassen wir den Thread-Ersteller entscheiden ^^
Ich hab mich jetzt auch doch mal daran versucht, meine Idee mit Regex zu lösen, und bin zu diesem Ergebnis gekommen:
C#-Quelltext 1:
| var regex = new Regex(@"Autonummer\s[\.0-9^\\]+"); |
Bei dieser Zeichenfolge:
Quelltext 1:
| pard\keepn\wodctlpar\s1\sb240[...]Autonummer 00.00.00\cf2\kerning0\[...] |
bekomme ich dann dieses Ergebnis:
Quelltext
Wie ich verhindern kann, dass "Autonummer" und der Backslash mit drin stehen, weiß ich nicht, aber zur Not ist das in C# dann auch schnell gelöst.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 15.10.13 23:17
Palladin007 hat folgendes geschrieben : | Für mich sieht das nach einem Pfad aus. |
Das ist kein Pfad, das sind RTF-Formatierungen...
Er hat doch auch selbst geschrieben, dass es ein RTF Dokument ist. Und das als normales Textdokument zu lesen ist schlicht nicht sinnvoll. Wie es richtig geht hat Frühlingsrolle ja schon geschrieben.
|
|
Palladin007
      
Beiträge: 1282
Erhaltene Danke: 182
Windows 11 x64 Pro
C# (Visual Studio Preview)
|
Verfasst: Di 15.10.13 23:37
Hab ich natürlich völlig überlesen -.-
Nagut, hätte aber auch nix geändert, da ich bisher noch nie mit rtf-Dateien gearbeitet habe.
Aber gut, wenn es so dann funktioniert und die Frage geklärt ist. ^^
|
|
kmkhl 
      
Beiträge: 28
Erhaltene Danke: 3
Win 95, Win XP, Win Vista, Win 7, Win 8, Win 8.1
Visual Basic, C#, PHP
|
Verfasst: Mi 16.10.13 08:39
Guten Morgen
zunächst einmal habt ihr alle etwas falsch verstanden, ich bin nämlich nicht "er" sondern "sie".
"So wie ich das verstanden habe, möchte er eine .rtf Datei auslesen.
Jedoch kommt ihm dabei ein kryptischer Text entgegen."
genau so ist es
@Frühlingsrolle: vielen Dank, das ist die Lösung die ich brauche.
und danke auch den anderen für Eure Bemühungen :]
Für diesen Beitrag haben gedankt: jaenicke
|
|