Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Cupy

Frischling

  • »Cupy« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Berlin

  • Private Nachricht senden

1

26.12.2010, 15:18

C# Datei Auslesungsproblem

Hi,
ich hab via Google versucht eine Lösung zu meinem Problem zu finden, hab aber leider keine dazu ins Besondere zu C# nichts gefunden.
Ich dachte vielleicht könntet ihr mir helfen bzw. Ansätze zur Problemlösung geben. ^^

Und zwar wollte ich von einer Textdatei nur eine bestimmte Zeile auslesen lassen.
Am Anfang der Datei "flugzeuge.txt" habe ich jeder Zeile eine Nummer gegeben. z.Bsp. 001,002,003 usw.
Meine bisherigen Versuche endeten immer damit das ich nur die letzte Zeile ausgelesen bekam und nicht so
recht weiss wie ich die bestimmte Zeil ansprechen kann. Das letzte Ergebnis war das ich mit einer char-Variablen ; die Zeilen
einzeln voneinander trennen wollte, aber dies klappt auch nicht. Kann es vielleicht auch sein das man nur bestimmte Zeichen zum
Splitten benutzen darf ?

Eine Idee von mir wäre nach der Zahl zu suchen, also zum Beispiel:
if(Zeilennummer 001 dann LeseZeile() bzw. ReadLine){}

Dann wäre die Frage aber auch wieder wie speichere ich die Zeilennummern am Anfang vorher in einer Variablen. Dazu müsste ich auch
erstmal den ersten Schritt erledigen. Ich glaube irgendwie ich denke zu kompliziert für diese eine Aufgabe. xD

Ich hab euch den Quellcode fürs Auslesen hier drunter angehangen. Vielleicht habt ihr ja eine Idee, ich sehe den Wald vor lauter Bäumen nicht. ^^

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
StreamReader leser = new StreamReader(@"../../flugzeuge.txt");
        String line;        
        char[] zeichen = { ';' };       //Trennzeichen fürs Splitten 
        while ((line = leser.ReadLine()) != null){
            //Console.WriteLine(line);
            string[] einlesen = line.Split(zeichen);  
            //Console.WriteLine(einlesen[0]);
            for (int i = 0; i < einlesen.Length; i++){
                Console.WriteLine(einlesen[i]);
                flugzeug = einlesen[0];
            }
        }
        Console.WriteLine("Flugzeug: " + flugzeug); //letztes Flugzeug
        leser.Close();


Vielen lieben Dank aber schonmal fürs Durchlesen des Problems! ^^

Lg Cupy

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

26.12.2010, 16:10

Datei mit File.ReadAllLines() einlesen, durch jede zeile gehen und überprüfen ob die Zeile mit deiner Zahl anfängt (StartsWith())

Solange du keine moster dateien hast sollte das die einfachste lösung sein. Wenn die Dateien aber extrem groß werden dürfte es sinnvoller sein die Datei nur in häppchen zu lesen und zu gucken, ob die gewünschte Zeile dabei war.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

3

26.12.2010, 23:34

So schlecht ist dein Ansatz nicht. versuche es so:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
StreamReader reader = new StreamReader(@"../../flugzeuge.txt");
        String line;        
        while ((line = reader.ReadLine()) != null)
{
    string[] einlesen = line.Split(new char[] { ' ' },StringSplitOptions.RemoveEmptyEntries);
    
    int value;
    if (int.TryParse(einlesen.Trim().TrimStart('0'),out value) && value == 1)
    {
        //...tu was
    }
        }
        reader.Close();

Cupy

Frischling

  • »Cupy« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Berlin

  • Private Nachricht senden

4

28.12.2010, 16:29

Hi,
vielen lieben Dank für die beiden Antworten. ^^

Ich habe beides mal ausprobiert, aber beides klappt aus irgendeinen Grund nicht. (bestimmt wieder irgendeine Kleinigkeit xD)
Hier meine Ergebnisse mit eurer Hilfe:
Sylence Lsg.-Weg:

Ich hab es wie du schriebst mit dem Einlesen via File.ReadAllLines() versucht zu machen und bin eigentlich
genau beim selben Problem stecken geblieben. Das Programm nimmt die if-Verzweigung irgendwie nicht wahr und
geht gar nicht erst rein.

Die Textdatei aus der gelesen bzw. die Zeile gesucht und ausgegeben werden sollte sieht so aus:
001 Airbus

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
string path = @"../../flugzeuge.txt";
//Zeilen auslesen und ausgeben
string[] leseText = File.ReadAllLines(path);
foreach (string s in leseText){
 Console.WriteLine("Lese Datei aus: ");
 Console.WriteLine(s);
}

//suche ob bestimmter Startwert vorhanden
if (path.StartsWith("001")){
 Console.WriteLine("Zeile 001 wurde gefunden!");
}
}



TrommlBomml Lsg.-Weg:

Bei dieser Lösungsvariante wird mir angezeigt das, dass einlesen-Array die Funktion .Trim() u. .TrimStart() nicht benutzen kann und
mir ist es nur möglich mit der "line"-Variablen die beiden Funktionen zu benutzen. Mit der "line"-Variablen hatte ich es auch versucht,
aber es funktioniert irgendwie einfach nicht. x_x

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
StreamReader leser = new StreamReader(@"../../flugzeuge.txt");
        String line;
        //char[] zeichen = { ';' };
        while ((line = leser.ReadLine()) != null){
            string[] einlesen = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            
            int value;          
            if(int.TryParse(einlesen.Trim().TrimStart('0'), out value) && value == 1){
                //--> zeige mir die Zeile die mit "0" beginnt
                Console.WriteLine("Zeile beginnt mit 0");
            }
        }
        leser.Close();


Vielen lieben Dank auf jeden Fall schonmal für eure Ideen. ^^
Ich probiere noch einwenig weiter, aber irgendwie fällt mir auch kaum noch was ein was ich nicht probiert hätte. x_x

Lg Cupy

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

28.12.2010, 18:55

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
string path = @"../../flugzeuge.txt";
//Zeilen auslesen und ausgeben
string[] leseText = File.ReadAllLines(path);
foreach (string s in leseText){
 Console.WriteLine("Lese Datei aus: ");
 Console.WriteLine(s);
}

//suche ob bestimmter Startwert vorhanden
if (path.StartsWith("001")){
 Console.WriteLine("Zeile 001 wurde gefunden!");
}
}


1) Du prüfst die falsche Variable auf einen Inhalt, den sie nie enthalten kann
2) Du hast die IF-Abfrage nicht innerhalb der Schleife, also wie willst Du dann die Zeile überhaupt prüfen?

Wo das beides ist, das überlasse ich Dir. Das sieht nämlich mal wieder nach Hausaufgabe aus irgendwie.

Bei der zweiten Möglichkeit prüfst Du wieder mal den kompletten Array anstatt nur die Zeile. Ich glaube, dass Dir ganz stark das Verständnis für Variablen, Schleifen und Verzweigungen fehlt und Du kein Stück von dem verstehst, was da eigentlich steht.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Cupy

Frischling

  • »Cupy« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Berlin

  • Private Nachricht senden

6

28.12.2010, 20:19

Hi,
ich verstehe, denke ich zumindest (;D), was ich schreibe, aber ich hab ein unglaubliches Problem mit Klammern.
In 80% meiner Fehler hat irgendeine Klammer damit zu tun.
Momentan versuche ich von Java auf C# umzusteigen und hab irgendwie ziemliche Probleme damit, obwohl es eigentlich ziemlich ähnlich ist.
Ich finde momentan irgendwie als besondere Schwierigkeit in dieser Aufgabe herauszufinden was in C# möglich ist. Im I-net habe ich diese msdn-Dokumentation gefunden. Du weisst nicht zufällig ob es eine für Dokumentation für Umsteiger gibt ? ^^

Edit: Dankeschön auf jeden Fall auch für deinen Beitrag! ^^ Ich hatte mir in MSDN die Sache mit dem File.ReadAllLines() angeschaut und dort war genau der Vergleich mit einer Variable, der dort auch nicht klappte. (mit deren Version) Jetzt hab ich mir das ganze nochmal angeschaut nach dem ich mir deinen Post durchlas und hab gesehen was für einen doofen Fehler ich nicht beachtet habe. xD

Vielen lieben Dank nochmal allen!

Lg Cupy

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Cupy« (28.12.2010, 20:24)


Werbeanzeige