Autor Beitrag
Concept-X
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 15.02.08 22:43 
Hi,
bevor ich hier die Krise bekomme, möchte ich euch eine Frage stellen...
Also, ich habe folgenden Code zusammengebastelt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
    public string get_config(string sFilename, int iLine)
    {
        string sText = "";
        string[] seperator = { "\r\n" };
        if (File.Exists(sFilename))
        {
            StreamReader openFile = new StreamReader(sFilename, System.Text.Encoding.Default);
            sText = openFile.ReadToEnd();
            openFile.Close();
        }
        string[] sRow = sText.Split(seperator, StringSplitOptions.None);
        return sRow[iLine];
    }

Das ganze ließt den Inhalt einer Datei(sFilename) aus und gibt genau den Inhalt einer Zeile wieder(iLine)...
Ich habe es zuerst auf primitive Art und Weise durchlaufen lassen und den Wert von z.B. Zeile 2 an ein Label gegeben:
ausblenden C#-Quelltext
1:
label1.Text = get_config(@"Text.txt"1);					

Es funktioniert auch wunderbar und er gibt mir genau die 2.Zeile der Datei Text.txt wieder...
Nun aber habe ich versucht den Inhalt aus der 2. Zeile einem timer zuzuweisen:
ausblenden C#-Quelltext
1:
timer_refresh.Interval = Convert.ToInt32(get_config(@"Text.txt"1))*1000;					

//*1000, damit der Inhalt den Sekunden entspricht...
Allerdings zeigt mir nun der Quelltext folgenden Fehler an:
IndexOutOfRangeException was unhandled
Der Fehler wird mir in der Zeile return sRow[iLine]; angezeigt...
Nachdem ich jetzt schon fast die komplette msdn-Hilfe diesbezüglich durchforstet habe, verstehe ich die Welt nicht mehr... ich hoffe ihr könnt mir helfen =(


Zuletzt bearbeitet von Concept-X am Fr 15.02.08 23:57, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 15.02.08 23:29 
Ich kann nur raten:

Durch irgend etwas, was Du vor der Zuweisung zum Timer-Intervall tust, ändert sich das Arbeitsverzeichnis. Dadurch wird die Datei nicht gefunden (Du gibst ja keinen Pfad an, was man immer machen sollte). Das Array mit den Zeilen ist leer -> krawumm


P.S.: Ändere bitte den Titel Deines Thread, der ist nicht so schrecklich aussagekräftig.
P.P.S.: Wieso liest Du die komplette Datei ein, wenn Du nur die erste Zeile haben willst?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Concept-X Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 15.02.08 23:55 
Hmm... es könnte wirklich am fehlen eines absoluten Pfades liegen... kannst du mir sagen wie ich den Pfad bekomme? Also so, dass wenn ich die *.exe irgendwo anders hinkopiere ich nicht den Sourcecode komplett ändern muss...

Naja, zu P.P.S.: ich brauch immer wieder unterschiedliche Zeilen:
Die Datei sieht wie folgt aus:
Zitat:
//Einstellungen:
1
393
335
671
536

Die für mich in diesem Teil wichtige Zeile ist die 2. Zeile, also im Bsp. wegen dem Array-Index der Inhalt des 1.Arrayindex...
In anderen Programmteilen hole ich mir die 3.,4.,usw. Zeile heraus...
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 16.02.08 00:05 
Schau Dir mal Application.StartupPath an, das sollte das sein, was Du brauchst.

Ich würde die Datei irgendwie so durchsuchen:
ausblenden Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
result := '';
var currentLine := 0;
using sr := new StreamReader(sFilename) do
  while not sr.EndOfFile do
  begin
    result := sr.ReadLine;
    if currentLine = iLine then exit;    
    currentLine := currentLine + 1;
  end;

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Concept-X Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Sa 16.02.08 02:10 
Danke!
In C# würde es dann in etwa so aus(ich habe es nie getestet!):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
    public string get_config(string sFilename, int iLine)
    {
        string content = "";
        int currentLine=0;
        StreamReader myFile = new StreamReader(sFilename, System.Text.Encoding.Default);
        while(!myFile.EndOfStream)
        {
            content=myFile.ReadLine();
            if(currentLine==iLine)
            {
                currentLine++;
            }
        }
    return content;
    }


Ich habe meinen Fehler erkannt... ich werde nie mehr mit zu komplizierten Dateinamen arbeiten :wink:
Es lag am Ende nicht an dem Pfad, sondern wie ich mit bedauern, nachdem ich deinen Chrome-Quelltext in C# umgeschrieben hatte, bemerken musste an dem Fehlen eines Buchstabens im Aufruf... "Text.txt" hatte ich nur als Bsp. eingefügt... ich hatte mich schlicht vertippt :oops:
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 16.02.08 12:10 
Das Schleifen-Innere in C# muss so aussehen:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
content=myFile.ReadLine();
if(currentLine==iLine)
  break;

currentLine++;

So liest er immer nur bis zu der Zeile, die Du haben willst und nicht die ganze Datei.

//edit: Ach ja, und das using-Statement sollte man auch in C# benutzen, weil es den Reader auch direkt disposed.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".