Laden...

Textdatei kompleziert zerlegen

Erstellt von VBMichi vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.912 Views
V
VBMichi Themenstarter:in
28 Beiträge seit 2007
vor 16 Jahren
Textdatei kompleziert zerlegen

Hi ihr.

Hab mal eine Frage wie man das mit C# hinbekommen könnte:Ich habe eine Textdatei die ungefähr so aussieht:

Test 000000000x091000000000000cv0001
Test: 1
Problem: Check23
doof
Am: 23.04.2007

Echt doof dass das nicht klappt irgendwie nun.. ---- das ist ja nur ein Test

Check

Test 0901910290111xx9819829
Check
Test: 21
&&24
Problem: Check12
Am: 23.07.2004
Sub: was ist los

Irgendwie immernoch doof oder?
Jaja, so ist das wenn mans nich kann

Test Nummer24 5555,,x991 Check+ggg Test: 001x

Problem: möp
Sub: was ist los
Am: 23.07.2004

Irgendwie immernoch doof oder? Jaja, so ist das wenn mans nich kann

G1

Wie ihr sicher merkt fängt jeder 'neue Bereich' in der Textdatei mit "Test " an.
Ich möchte nun das immer der ganze Text zwischen den Test's (und dem letzten Test und dem Ende der Datei) in Felder oder Textdateien abgelegt wird.

Also soll am Ende ungefähr das rauskommen:

Feld1:

Test: 1
Problem: Check23
doof
Am: 23.04.2007

Echt doof dass das nicht klappt irgendwie nun.. ---- das ist ja nur ein Test

Check

Feld2:

Check
Test: 21
&&24
Problem: Check12
Am: 23.07.2004
Sub: was ist los

Irgendwie immernoch doof oder?
Jaja, so ist das wenn mans nich kann

Feld3:

Check+ggg Test: 001x

Problem: möp
Sub: was ist los
Am: 23.07.2004

Irgendwie immernoch doof oder? Jaja, so ist das wenn mans nich kann

G1

Natürlich können noch viele andere solcher Bereiche in die Textdatei hinzukommen, das ganze muss also variabel sein.
Ich hab keine Ahnung wie ich das hinbekommen könnte.

Hoffentlich versteht ihr meine Erklärungsversuche.

Grüße & Danke schonmal

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo VBMichi,

String.Split oder Regex.Split

herbivore

V
VBMichi Themenstarter:in
28 Beiträge seit 2007
vor 16 Jahren

Hi herbivore.

Danke für die schnelle Antwort.
Split war mir vorher auch geläufig, ich hab nur keine Ahnung wie ich das in meinem speziellen Fall anwenden soll.
Kannst du ein kleines Beispiel machen?

X(

Grüße

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo VBMichi,

du weißt nicht, wie du es anwenden sollst??? Hast du schon mal in die :rtfm: Doku geguckt?

herbivore

B
1.529 Beiträge seit 2006
vor 16 Jahren

Da "Test" ein Wort ist, das auch einfach so im Text stehen kann, würde ich den Text von Hand splitten. Es wäre trotzdem empfehlenswert, ein anderes Trennzeichen zu verwenden.

V
VBMichi Themenstarter:in
28 Beiträge seit 2007
vor 16 Jahren

Klar kenne ich die Split Funktion gut.
Das Problem liegt auch eher darin den Text zwischen den Test's und dem letzten Test und dem Dateiende in Felder zu legen (und das ganze variabel zu machen).

@ Borg:

Wenn Test mehrmals vorkommt macht das nichts, da ist vorgesorgt.

Grüße

B
1.529 Beiträge seit 2006
vor 16 Jahren

Wenn Test mehrmals vorkommt macht das nichts, da ist vorgesorgt.

Diese Aussage verstehe ich nicht. Wenn du ein eindeutiges Trennzeichen hast, reicht ein simples:

string[] blocks = File.ReadAllText( dateiname ).Split( trennzeichen );
string[][] inhalt = new string[][blocks.Length];
for( int i = 0; i < blocks.Length; i++ )
{
   inhalt[i] = blocks[i].Split( '\n' );
}

um das ganze zu splitten.

Meinst du mit deiner Aussage, das Test kein zulässiges Wort in der Beschreibung ist?

V
VBMichi Themenstarter:in
28 Beiträge seit 2007
vor 16 Jahren

Hallo Borg,

wenn das ganze das macht, was ich denke, dann war das genau das was ich suche.
Leider bekomme ich Fehler von #develop zurückgeliefert:

Und zwar hier:

string[] blocks = File.ReadAllText("Testdatei.txt").Split("Test ");
string[][] inhalt = new string[][blocks.Length];

Fehler: Array creation must have array size or array initializer
Fehler: Invalid rank specifier: expected ',' or ']'

Er markiert 'blocks' von 'blocks.Length und den Strichpunkt in Zeile 2.

Grüße

3.825 Beiträge seit 2006
vor 16 Jahren

Oder so :


string text = File.ReadAllText("Testdatei.txt");
text = text.Replace("\r\nTest","\r\n|Test");
string[] felder = text.Split('|');

Als Trennzeichen (hier |) musst Du natürlich ein Zeichen wählen dass nicht im Text vorkommt.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

49.485 Beiträge seit 2005
vor 16 Jahren
V
VBMichi Themenstarter:in
28 Beiträge seit 2007
vor 16 Jahren

Hallo.

Wollte nur kurz bescheid geben das ich es geschafft habe.
Danke nochmal für die Hilfe.

Grüße

D
386 Beiträge seit 2007
vor 16 Jahren

Original von BerndFfm
Oder so :

  
string text = File.ReadAllText("Testdatei.txt");  
text = text.Replace("\r\nTest","\r\n|Test");  
string[] felder = text.Split('|');  
  

Als Trennzeichen (hier |) musst Du natürlich ein Zeichen wählen dass nicht im Text vorkommt.

Nur aus Neugier: Warum soll er hier erst aus einer Trennmarkierung eine andere machen?

Pound for pound, plutonium is about as toxic as caffeine when eaten.

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo DarKlajid,

wenn man "\r\nTest" als Trennmarkierung nehmen würde, wäre dieser Text ja nicht mehr im Ergebnis enthalten.

So wird ein | eingefügt, der durch das Split wieder entfernt wird.

Eleganter ginge es natürlich mit Regex.Replace, weil man damit auch 0 Zeichen breite Trenner verwenden kann.

herbivore