*.txt durchsuchen



  • Bin ja selbst noch C#-Anfänger und hab was (übertrieben kompliziertes 🤡 ) zusammengebastelt:

    using System.IO;
     using System.Text.RegularExpressions;
    
     class Test
     {
     	public static void Main()
     	{
     		FileStream fin = new FileStream("datei1.txt", FileMode.OpenOrCreate);
     		StreamReader sin = new StreamReader(fin);
     		FileStream fout = new FileStream("datei2.txt", FileMode.Create);
     		StreamWriter sout = new StreamWriter(fout);
    
     		Regex pattern = new Regex(@"[A-Za-z][A-Za-z 0-9]+[A-Za-z0-9]");
     		string oldLine = sin.ReadLine();
     		string newLine = "";
    
     		while(oldLine != null)
    	 	{
    	 		MatchCollection matches  = Regex.Matches(oldLine, @"[A-Za-z][A-Za-z 0-9]+[A-Za-z0-9]");
    
    	 		foreach(Match match in matches)
    	 		{
    	 			string smatch = "\"" + match.Value + "\"";
    	 			smatch = smatch.Replace(" mit ", "\";\"");
    	 			smatch = smatch.Replace("nach ", "");
    
    	 			newLine += smatch + ";";
    	 		}
    
    	 		newLine = newLine.Remove(newLine.Length - 1, 1);
    	 		sout.WriteLine(newLine);
    	 		oldLine = sin.ReadLine();
    	 		newLine = "";
    	 	}
    
     		sin.Close();
     		sout.Close();
     	}
     }
    

    Ich hab keinen Zweifel, dass es viel einfacher geht.

    [Edit] Und tatsächlich, übers Duschen kommen einem die besten Einfälle 🙂

    using System.IO;
     using System.Text.RegularExpressions;
    
     class Test
     {
     	public static void Main()
     	{
     		FileStream fin = new FileStream("datei1.txt", FileMode.OpenOrCreate);
     		StreamReader sin = new StreamReader(fin);
     		FileStream fout = new FileStream("datei2.txt", FileMode.Create);
     		StreamWriter sout = new StreamWriter(fout);
    
     		Regex pattern = new Regex(@"[^A-Za-z0-9]{2,}|[^A-Za-z0-9 ]");
     		string line = sin.ReadLine();
    
     		while(line != null)
     		{
    	 		line = pattern.Replace(line, "\";\"");
    	 		line = line.Replace(" mit ", "\";\"");
    	 		line = line.Replace("nach ", "");
    	 		line = line.Trim('\"');
    	 		line = line.Trim(';');
    
    	 		sout.WriteLine(line);
    	 		line = sin.ReadLine();
     		}
    
     		sin.Close();
     		sout.Close();
     	}
     }
    


  • Hallo und vielen dank. die Lösung klappt soweit ganz gut, einziges Problem ist das die letzte Zeile folgendermaßen aussieht:

    "Banane Premium";"na

    weiterhin habe ich festgestellt das 6 Zeilen unterschlagen werden!! Kennt jemand den grund wenn man den Code sieht? Ich nicht 😉

    //edit:

    noch eine kleine Frage

    Regex pattern = new Regex(@"[^A-Za-z0-9]{2,}|[^A-Za-z0-9 ]");
    

    habe ich geändert in

    Regex pattern = new Regex(@"[^A-Za-z0-9]{2,}|[^A-Za-z0-9 ][b][-][/b]");
    

    um auch Bindestrich zulassen zu können. Nun wollte ich selbe mit ( ) veruschen, aber ohne erfolg.... *verzweifel*



  • freggel schrieb:

    Hallo und vielen dank. die Lösung klappt soweit ganz gut, einziges Problem ist das die letzte Zeile folgendermaßen aussieht:

    "Banane Premium";"na

    Kanns sein, dass in der Eingangsdatei am Ende kein " steht?

    weiterhin habe ich festgestellt das 6 Zeilen unterschlagen werden!!

    Wie sehen die Zeilen aus?



  • Michael E. schrieb:

    Kanns sein, dass in der Eingangsdatei am Ende kein " steht?

    In der Quelldatei steht hinter jeder Zeile ";
    auch in dieser zeile die etwas abgehackt wurde!!

    Michael E. schrieb:

    Wie sehen die Zeilen aus?

    Die Zeilen sehen in etwa so aus:
    "Banane Profi";" nach Banane Business";



  • freggel schrieb:

    Regex pattern = new Regex(@"[^A-Za-z0-9]{2,}|[^A-Za-z0-9 ]");
    

    habe ich geändert in

    Regex pattern = new Regex(@"[^A-Za-z0-9]{2,}|[^A-Za-z0-9 ][b][-][/b]");
    

    um auch Bindestrich zulassen zu können.

    Regex pattern = new Regex(@"[^A-Za-z0-9-]{2,}|[^A-Za-z0-9 -]");
    

    Allerdings kriegst du dann Probleme mit

    "Banane Luxus - " "nach Apfel Standard mit Birne 500"
    

    Sollen Bindestriche nur in Verbindung mit Buchstaben erlaubt sein?

    Nun wollte ich selbe mit ( ) veruschen, aber ohne erfolg.... *verzweifel*

    Raff ich nicht 😕



  • Michael E. schrieb:

    Raff ich nicht 😕

    hat sich soweit erledigt, war nur zu dumm zum lesen... bzw. hab mir das nochmal genauer angesehen und gecheckt warum das net klappt!! nun hab ich nur noch das Problem mit der abgehackten Zeile und den 6 fehlenden....



  • [quote="freggel...hat sich soweit erledigt, war nur zu dumm zum lesen... bzw. hab mir das nochmal genauer angesehen und gecheckt warum das net klappt!! ...[/quote]
    oder vielleicht deswegen



  • Danke, Polofreak.

    freggel: Crosspostings sind (außer in Ausnahmefällen) nicht erwünscht, noch schlimmer sind nur Crosspostings, denen man nicht ansieht, dass es Crosspostings sind.



  • nun ich bin mir allerdings keiner schuld bewusst.

    ich hab hilfe gesucht und das schnell, und warum nicht auf 2 hochzeiten tanzen? ich habe soar um ehrlich zu sein auch noch auf einer dritten getanzt:

    http://forum.2lucky.de/ptopic,33935,23adefc08f1c409bf862b46ebb2b47f8.html#33935

    doch da war nichts mit hilfe!! Ihr könnt mich nun verbannen oder meine hilferufe in zukunft ignorieren, ich kann euch ja sicherlich nciht dran hindern, aber mich solls nich stören. dann werd ich mir eben andere hilfe suchen müssen. Obwohl eure hilfe hier sehr gut war, aber was solls....



  • In dringenden Fällen darf man IMHO auch mal crossposten. Aber dann bitte mit Links.



  • gut gut,
    falls ich das nächste mal so einen dringenden fall habe und in mehreren Foren poste werde ich darauf hinweisen!!

    gruß



  • das störendste (auch der Grund warum es so unerwünscht ist) ist, dass du in jedem Forum ein Teil der Lösung hast. Wenn du dann nicht konsequent die Lösung vom einen ins andere postest, kann einer der ähnliches Problem hat weder im einen noch im anderen Forum was mit deinen Beiträgen anfangen. Dann gibt es so tolle Posts wie "Hat sich schon erledigt" oder ähnliches, womit man später NICHTS anfangen kann!


Anmelden zum Antworten