Datei auslesen

PhilippVP2112

Newbie
Registriert
Jan. 2016
Beiträge
3
Hallo zusammen,



ich habe eine Datei (*.txt) in dieser verschiedene Daten zu einem Datensatz in 3 oder 4 Zeilen stehen, diese ich aber gerne zu einer zusammen fassen möchte.

Aufbau der Datei:
Notepad_Bild.JPG



Nach dem verarbeiten sollte dann dieser Datensatz entstehen:

0815;541655;WW;1,20;Buchstabe A;Platz5;

08151;5416552;WW;1,30;Buchstabe B;Platz6;

08152;5416553;WW;1,40;Buchstabe C;Platz7;



Könnt Ihr mir da helfen?



Danke im vorraus.



Philipp
 
Willst du das Programmieren?
Wenn ja würde ich so vorgehen:
Du ließt die gesamte Datei ein.
Formatierst den String in eine Zeile.
Schreibe den String wieder in die Datei und mach nach jeden 6ten Strichpunkt ";" einen Absatz.
 
Da du Notepad++ sowieso schon verwendest: http://www.mamas-computerlexikon.de/2014/zeilenumbrueche-mit-notepad/

Alle Zeilenumbrüche (also Carriage Return und Line Feed) durch Suchen und Ersetzen entfernen. Dann einen Zeilenumbruch vor jedem ;PLatz einfügen. Also ;PLatz mit \r\n;PLatz ersetzen.

€dit: Hm, nee, PLatzx soll ja am Ende jeder Zeile stehen. Dann muß man’s umbauen.

€dit2: ’tschuldigung, hab den Namen des Unterforums nicht beachtet, weil ich vom Forumsticker der Startseite kam. Programmieren dann natürlich mit den Vorschlägen von Rooky420 oder sparvar.
 
Zuletzt bearbeitet:
ich würde das gerne programmieren, ja :)


also die erste 3 oder 4 Zeilen auslesen(ist unterschiedlich) und die carriage return löschen bis ein carriage return line feed kommt.
Ergänzung ()

@DeusoftheWired: ich möchte dies aber in C# programmieren.
 
das kannst mit einem simplen batchscript machen. macht spass, kleine fingerfertigkeitsübung. :)

Du brauchst: dateilesen, zeilen speichern, elemente entfernen, zusammenführen, "Platz7 erkennen(oder immer 2 CR/LF entfernen) und in die neue Datei schreiben.
fertig.
 
Naja mir war grad langweilig... ist zwar nicht schön aber funktioniert

Code:
            string datei = @"Pfad zur Datei";

            string[] data = System.IO.File.ReadAllText(datei).Replace("\r\n",String.Empty).Replace(" ",String.Empty).Split(';');

            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(datei))
            {
                string line = "";
                int index = 0;
                bool noDataLeft = false;
                do
                {
                        line = "";
                        for (int i = 0; i < 6; i++)
                        {
                            if (index == data.Length-1){
                                noDataLeft = true;
                                break;
                            }
                                
                            line += data[index++] + ";";
                        }
                        sw.WriteLine(line);
                    
                } while (!noDataLeft);
            }
 
Mit Hilfe von Perl geht es als Einzeiler:
In einer Eingabeaufforderung (ich gehe davon aus, daß Du unter Windows arbeitest) folgendes eingeben:

Code:
perl -e "$_= join('', <>);  s/\nBuchstabe/Buchstabe/g; print $_;" eingabe.txt


HTH

BigNum


EDIT ------------->8

@PhilippVP2112 : Dass Du es in C# willst hättest Du auch schon von Anfang an schreiben können

Code:
using System;
using System.IO;
using System.Text.RegularExpressions;

class Program
{
    static void Main(string[] args)
    {
        string original = File.ReadAllText("eingabe.txt");

        string replaced = Regex.Replace(original, "\r\nBuchstabe", "Buchstabe");
        Console.WriteLine(original);
        Console.WriteLine(replaced);
    }
}

gibt bei mir:
Code:
0815;541655;WW;1,20;
Buchstabe A;Platz5;
08151;5416552;WW;1,30;
Buchstabe B;Platz6;
08152;5416553;WW;1,40;
Buchstabe C;Platz7;

0815;541655;WW;1,20;Buchstabe A;Platz5;
08151;5416552;WW;1,30;Buchstabe B;Platz6;
08152;5416553;WW;1,40;Buchstabe C;Platz7;
 
Zuletzt bearbeitet: (Edit von "PhilippVP2112": Es soll in C# sein...)
DeusoftheWired schrieb:
€dit2: ’tschuldigung, hab den Namen des Unterforums nicht beachtet, weil ich vom Forumsticker der Startseite kam. Programmieren dann natürlich mit den Vorschlägen von Rooky420 oder sparvar.

Ich finde das so schon völlig richtig, er hat von _einer_ Datei geschrieben, wenn die nicht zu groß für den Editor ist oder sonstwelche Einschränkungen herrschen wird man das wohl über ein Suchen/Ersetzen 10 mal schneller lösen als über ein Programm, ergo sollte das auch das Mittel der Wahl sein (und große Überraschung, die Lösung von Bignum in C# machts auch nicht anders ;)).

Ich habe sowas immer mal in den verschiedensten Spielarten auf Arbeit. Was ich da im Editor machen kann, erledige ich auch im Editor (oder mit Calc oder sonstwas), es bringt meistens einfach nichts solche Kleinigkeiten fest wegzucoden, weil die nächste Datei die man bekommt, dann halt den Umbruch an anderer Stelle hat.

So, noch kurz zum Problem: wenn das keine Hausaufgabe ist wird die Datei wohl nicht Buchstabe A, Buchstabe B usw und 0815 als Wert enthalten. Sprich der Weg über Regex wird so wahrscheinlich gar nicht funktionieren(weder im Editor noch mit C#). Im Zweifelsfall müsste man also in einer Schleife die Datei zeilenweise einlesen, bei jeder ungeraden Zeile (wenn man bei 1 anfängt zu zählen) das \r\n durch Luft ersetzen und dann eine zweite Datei mit allen Zeilen befüllen. Ich hab jetzt keine Lust das in C# zu googlen, falls dir Bignums Regex nicht reicht ist er vielleicht so nett und schreibt dir das kurz auf.
 
Wenn man ein Regex-System hat, das (wenigstens optional) den ganzen Text als Einheit betrachtet, kann man das durchaus auch damit lösen. Wenn jetzt fest jeweils drei Zeilen zusammengeführt werden sollen:
Code:
Ersetze: ([^\r\n]+)[\r\n]+([^\r\n]+)[\r\n]+([^\r\n]+)[\r\n]+
Durch:   \1\2\3\r\n
Zumindest funktioniert das in meinem bevorzugten Texteditor (Kate) so. Für den Spezialfall 4 Zeilen dann noch eben einen optionalen Ausdruck dazwischenfummeln und fertig, ggf. auch nach "Platz" als Trenner gehen oder was auch immer. Irgendwelche Erkennungsmerkmale muss es ja geben.
 
Zuletzt bearbeitet:
Ich will mich da nicht aus dem Fenster hängen aber ich glaube nicht dass Notepad++ bzw die Scythe Editoren das können, also da wird Kate auch die rühmliche Ausname sein. Blöderweise ist gerade die Regex Komponente bei den Editoren immer eher stiefmütterlich dokumentiert :(
 
mambokurt schrieb:
Ich will mich da nicht aus dem Fenster hängen aber ich glaube nicht dass Notepad++ bzw die Scythe Editoren das können, also da wird Kate auch die rühmliche Ausname sein.
*** möööp *** falsch, Notepad++ kann das sehr wohl:

(Hab die englische Version)
Menü -> Search -> Replace:

Find what: \r\nBuchstabe
Replace with: Buchstabe

Search Mode Extended

Und dann auf "Replace All" klicken!
 
BigNum schrieb:
*** möööp *** falsch, Notepad++ kann das sehr wohl:

(Hab die englische Version)
Menü -> Search -> Replace:

Find what: \r\nBuchstabe
Replace with: Buchstabe

Search Mode Extended

Und dann auf "Replace All" klicken!

Ich redete von Code:
Ersetze: ([^\r\n]+)[\r\n]+([^\r\n]+)[\r\n]+([^\r\n]+)[\r\n]+
Durch: \1\2\3\r\n

Und falls du den anderen Beitrag noch gelesen hattest: ich denke _nicht_ dass in der Datei "Buchstabe A" steht, da wird eher nur ein A stehen, ich glaube der TE hat das verallgemeinern wollen. Ich kenne einige Texteditoren, manche unterstützen Regex sehr gut, manche eher stiefmütterlich, manche setzen flavor X um, manche flavor Y. Letztendlich muss man sich da an seinen Editor gewöhnen und anpassen. Ich bin mir zB relativ sicher dass Geany die Geschichte mit \1\2\3\r\n im Replace nicht unterstützt, zumindest habe ich das vor ein paar Jahren mal probiert und da ging es (glaube ich) nicht. Man muss vielleicht dazu sagen dass man so etwas auch nicht unbedingt täglcih macht, eh man da erst googelt und eine 3/4 Stunde dran rumwürgt bis es geht, ist man vielleicht mit Libre Office Calc oder ähnlichen Lösungen schneller am Ziel (so nach dem Motto 'I had 99 problems, so i used a regex, now i have 100.').
 
Zurück
Oben