Forum: PC-Programmierung Datei auslesen in C#


von Ben S. (theben)


Lesenswert?

Hallo

Ich probiere mich gerade in C# programmierung.

Ich möchte gern bei einer Datei jedes Zeichen einzeln aus lesen

bei C ging das immer sehr einfach:
1
fil = fopen(dateiname, "r");       //öffnen der Datei
2
fseek(fil, offset, SEEK_SET);      //Lesezeiger auf die gewünschte Position setzen
3
    
4
c=fgetc(fil);                      //Einzelzeichen auslesen

Bei C# gibt es zwar eine schone vereinfacherung mit readline() wo ich 
die ganze Zeile bekomme doch da will ich nicht.

Wenn ich in C# zb. file.read() stadt file.readline() benutze klappt das 
nicht.

read() gibt einen int zurück und genau das verstehe ich nicht

von bluppdidupp (Gast)


Lesenswert?

Nimm die FileStream-Klasse, die hat .ReadByte()

von Sam .. (sam1994)


Lesenswert?

Ben S. schrieb:
> read() gibt einen int zurück und genau das verstehe ich nicht

In dem int ist dein Byte enthalten - hat mich auch schon verwirrt.

von Arc N. (arc)


Lesenswert?

Ben S. schrieb:
> Bei C# gibt es zwar eine schone vereinfacherung mit readline() wo ich
> die ganze Zeile bekomme doch da will ich nicht.
>
> Wenn ich in C# zb. file.read() stadt file.readline() benutze klappt das
> nicht.
>
> read() gibt einen int zurück und genau das verstehe ich nicht

fgetc gibt ebenso einen int zurück...EOF falls Dateiende, ansonsten das 
Zeichen.
StreamReader.Read -1 falls Dateiende, ansonsten das Zeichen

Wenn die gesamte Datei auf einmal eingelesen werden kann z.B.
1
string str = File.ReadAllText(fileName);
2
//Zeichenweise z.B.
3
char ch;
4
// falls das ASCII-Texte sind
5
using (StreamReader reader = new StreamReader(fileName, System.Text.Encoding.ASCII)) {
6
    while (reader.Peek() > 0) {
7
          ch = (char)reader.Read();
8
    }
9
}
10
// wenn mit Seek gearbeitet werden muss
11
// FileStream und die Bytes selber in Zeichen umwandeln...
12
byte b;
13
using (FileStream reader = new FileStream(fileName, FileMode.Open)) {
14
    reader.Seek(0, SeekOrigin.Begin);
15
    ...
16
    b = (byte)reader.ReadByte();
17
    ...
18
}

von Sam .. (sam1994)


Lesenswert?

while (reader.Peek() > 0)

müsste doch entweder >= 0 sein oder != -1, denn 0 kann auch in einer 
Datei vorkommen.

Wenn du irgendetwas parsen möchtest und die Datei nicht zu groß ist, 
empfehle ich dir die ganze Datei einzulesen. Die Stringmethoden sind 
einfach deutlich mächtiger als das Filezeug.
1
Streamreader sr = new Streamreader("a.txt");
2
string all = sr.ReadToEnd();
3
sr.Close();

von Marcus B. (raketenfred)


Lesenswert?

Samuel K. schrieb:
> Ben S. schrieb:
>> read() gibt einen int zurück und genau das verstehe ich nicht
>
> In dem int ist dein Byte enthalten - hat mich auch schon verwirrt.

http://msdn.microsoft.com/en-us/library/aa328963%28v=VS.71%29.aspx

Bisschen ungewöhnlich notiert, aber da steht recht genau was die 
Funktion macht

Return Value

The next character from the input stream represented as an Int32, or -1 
if no more characters are available.

von Arc N. (arc)


Lesenswert?

Samuel K. schrieb:
> while (reader.Peek() > 0)
>
> müsste doch entweder >= 0 sein oder != -1, denn 0 kann auch in einer
> Datei vorkommen.

...zu schnell getippt.
Auch wenn es bei ASCII-Dateien meistens funktionieren sollte ;-)
wäre >= 0 oder != -1 korrekt

von A. V. (kra5h)


Lesenswert?

Ben S. schrieb:
> Hallo
>
> Ich probiere mich gerade in C# programmierung.
>
> Ich möchte gern bei einer Datei jedes Zeichen einzeln aus lesen
>
> bei C ging das immer sehr einfach:
>
>
1
> fil = fopen(dateiname, "r");       //öffnen der Datei
2
> fseek(fil, offset, SEEK_SET);      //Lesezeiger auf die gewünschte
3
> Position setzen
4
> 
5
> c=fgetc(fil);                      //Einzelzeichen auslesen
6
>
>
> Bei C# gibt es zwar eine schone vereinfacherung mit readline() wo ich
> die ganze Zeile bekomme doch da will ich nicht.
>
> Wenn ich in C# zb. file.read() stadt file.readline() benutze klappt das
> nicht.
>
> read() gibt einen int zurück und genau das verstehe ich nicht


da:
1
            // "zuLesendesZeichen" = "nTesZeichen" aus "<PATH>" in "Zeile"
2
            char zuLesendesZeichen;
3
            string[] fileText = System.IO.File.ReadAllLines(<PATH>); // <PATH> = z.B. C:\test\datei.txt
4
            zuLesendesZeichen = fileText[Zeile].Substring(nTesZeichen,1); // Substring ( Startindex , Anzahl der Zeichen )

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.