Datei auslesen in C#

OP #2319586
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
#2319660
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
}
#2319667
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();
#2319679
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.
#2340428
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 )

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren