Autor Beitrag
Raffa1989
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 30.01.09 13:02 
Das ist der Code fürs einelesen von Der configfile
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
public void ReadConf()
        {
            ConfigFile = "D:/test/cfg.txt";
            StreamReader SR = new StreamReader(ConfigFile);
            string Record = null;
            NumPak = -1;
            for (I = 0; I <= MaxPak; I++)
            {
                NumPrg[I] = -1;
                Gruppe[I] = "";
                for (J = 0; J <= MaxPrg; J++)
                {
                    Progname[I, J] = "";
                    Progpath[I, J] = "";
                }
            }
            Record = SR.ReadLine();
            while (SR.Peek() != -1)
            {
                if (Record == "[EDITOR]")
                {
                    Editor = SR.ReadLine();
                    Record = SR.ReadLine();
                }
                else if (Record == "[VIEWER]")
                {
                    Viewer = SR.ReadLine();
                    Record = SR.ReadLine();
                }
                else if (Record == "[POSTSCRIPT]")
                {
                    PSViewer = SR.ReadLine();
                    Record = SR.ReadLine();
                }
                else if (Record == "[PSVIEWER]")
                {
                    PSViewer = SR.ReadLine();
                    Record = SR.ReadLine();
                }
                else if (Record.StartsWith("[PAKET"))
                {
                    I = Record.Length;
                    NumPak = NumPak + 1;
                    Gruppe[NumPak] = Record.Substring(7, (I - 8));
                    while(SR.Peek() != -1
                    {
                        SR.Close();
                    }
                    Record = SR.ReadLine();
                    if (Record.StartsWith("[PAKET"))
                    {
                        break;
                    }
                    else
                    {
                        string[] Item = Record.Split(new Char[] { ';' });
                        NumPrg[NumPak] = NumPrg[NumPak] + 1;
                        Progname[NumPak, NumPrg[NumPak]] = Item[0];
                        Progpath[NumPak, NumPrg[NumPak]] = Item[1];
                    }
                }
            }
        
            SR.Close();
        }

son nun die Combobox:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 public void cmbpchanged(object sender, EventArgs e)
        {
            ActPak = cmbprogp.SelectedIndex;
            cmbprog.Items.Clear();
            for (J = 0; J <= NumPrg[ActPak]; J++)
            {
                cmbprog.Items.Add(Progname[ActPak, J]);
            }    
        }

meine Combobox wird immer mit einer 0 gefüllt
könnt ihr mir vil sagen wo der fehler ist??
falls jemand ne Idee hat bitte posten;)
mfg
Raffa


Zuletzt bearbeitet von Raffa1989 am Fr 30.01.09 16:07, insgesamt 2-mal bearbeitet
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4805
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Fr 30.01.09 13:13 
Bitte pack deinen Code in C#-Tags (und verwende am besten zuerst die Vorschau bevor du den Betrag absendest).
Raffa1989 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 30.01.09 15:30 
ok hab ich gemacht sry bin neu hier :)
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 30.01.09 15:39 
Hallo,

wenn Du es als C# (statt "allg.Code") markieren würdest, wäre es noch besser lesbar.

Zum Verständnis: Könntest Du bitte noch die Deklarationen von NumPrg[] und Progname[] angeben? Vielleicht wäre es auch hilfreich, wenn Du deren Verwendung kurz erklären könntest. Wie werden die Arrays initialisiert, stehen immer Werte drin?

Weil ActPak nur im EventHandler von Bedeutung ist, sollte er dort als int deklariert werden und nicht allgemein gültig sein. Gleiches gilt erst recht für die Laufvariablen I und J in for-Schleifen.

Zum Lesen von Textdateien ist meistens File.ReadAllLines (oder ReadAllText) praktischer.

Gruß Jürgen
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 30.01.09 15:42 
Was mir sofort auffällt:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
                    while(SR.Peek() != -1
                    {
                        SR.Close();
                    }
                    Record = SR.ReadLine();
Sollte der Stream bei dem ReadLine so nicht bereits geschlossen sein?
Raffa1989 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 30.01.09 16:03 
danke für die schnellen antworten

ne -1 ist wenn er am ende angekommen ist da != -1 wird er ja weiter ausgeführt oder nicht??

und zu den variablen die sind hier
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
  public static int MaxPak = 10;
        public static int MaxPrg = 10;
        public static int ActPak;
        public static int ActProg;
        public static int NumPak;
        public static int[] NumPrg = new int[MaxPak + 1];
        public static string[] Gruppe = new string[MaxPak + 1];
        public static string[,] Progname = new string[MaxPak,MaxPrg];
        public static string[,] Progpath = new string[MaxPak,MaxPrg];
        public static int[,] Pipeline = new int[MaxPak,MaxPrg];
        public static string ConfigFile;
        public static string Editor;
        public static string Viewer;
        public static string PSViewer;
        public static string InputFile;
        public static string WorkDirectory;
        public static string OutputFile;
        public static string TempFile;
        public static int I;
        public static int J;

NumPak ist die Nummer der Pakete welche ich in der Combobox ausgeben will
Raffa1989 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Fr 30.01.09 16:22 
ehm ja du hast recht mit dem streamreader ich hab es jetzt ma in ner if schleife gesetzt
ausblenden C#-Quelltext
1:
2:
3:
4:
if (SR.Peek() == -1)
{
SR.Close();
}

aber es bringt trz nix daran liegts nicht^^
trz danke
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 30.01.09 16:38 
Hallo,

zum parsen von ini-Files mit Kategorien würde ich die Kernel32 library verwenden ( siehe jachman.wordpress.co...-ini-files-in-c-net/ ).

Dann brauchst du nicht so einen statischen Konstrukt pflegen.

Wenn du das umgeschrieben hast sollte es einfach sein die Kategorieren und Key-Values zu verwarbeiten.

Btw.: die würde ich nicht in eine ComboBox, sondern in ein ListView anzeigen. Ab Windows XP kann das Gruppierungen und du hast es ziemlich schick ...

Gruß Daniel

PS: Ach www.codeproject.com/KB/cs/cs_ini.aspx sind die Library-Zugriffe für .net schon als Klasse gekapselt.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 30.01.09 18:02 
Hallo Raffa,

tut mir leid, ich verstehe Dein ganzes Vorgehen nicht. Was soll eigentlich in den Arrays eingetragen und später ausgelesen werden? Vielleicht kannst Du es mit ein paar Beispieltexten deutlich machen.

Unabhängig davon solltest Du Dich schleunigst von den Unmengen statischer Variablen verabschieden. Eine Variable wird mit möglichst kleinem Gültigkeitsbereich festgelegt und nur dort deklariert, wo sie benötigt wird. Beispiel:
ausblenden C#-Quelltext
1:
for(int x1 = 0; x1 < myArray.Length; x1++) { ... }					

Arrays sollten nur dort benutzt werden, wo es sich wirklich um eine feste Größe handelt. Wenn es sich um variable Daten handelt, ist List<T> besser. Wenn Deine Ini-Datei auf einmal 12 Rubriken enthält, bekommst Du ständig IndexOutOfRangeExceptions oder musst das Programm an vielen Stellen anpassen (von denen man mit Sicherheit die oder andere vergisst).

Gruß Jürgen