logisches Problem
-
Hallo zusammen,
ich hab' ein Problem das sich irgendwie nicht wirklich lösen lässt von mir...
es verändert sich zwar immer wieder, aber wie es sein sollte, bring ich es nicht hin. und zwar: Ich habe ein INI-File aus dem ich Parameterwerte auslesen möchte und dann in einer TStringGrid darstellen will... mit dem Code:
ParamFile = new TIniFile(ExtractFileDir(ParamStr(0)) + "\\Param.ini"); Grid->RowCount=1; int INDCount=0; AnsiString AlreadyUsed_AS; int f=0;//Fehlerzähler nullen for (int i=1; i<=4096; i++) { Grid->RowCount=Grid->RowCount+1; // Eine Zeile hinzufügen Grid->FixedRows=1; // fixed rows für die beschriftung festlegen Grid->Cells[1][i-f+INDCount]=ParamFile->ReadString("Parameters",i,"100000");// ^Parameter aus INI-File lesen und in Tabelle einfügen if (Grid->Cells[1][i-f+INDCount]=="100000")// Wenn beim auslesen aus Ini-File als Defaultwert 1000 eingefüllt wurde... { f++; // Fehlervar. um eins inkrementieren Grid->RowCount=Grid->RowCount-1;// Eine Zeile löschen } else Grid->Cells[0][i-f]=i; // Parameternummer einfügen if (Grid->Cells[1][i-f].Pos("(IND)")&&Grid->Cells[1][i-f+INDCount]!=AlreadyUsed_AS)// Wenn (IND) irgendwo im Parameter steht { AlreadyUsed_AS=Grid->Cells[1][i-f+INDCount]; for (int IND_int=1; IND_int<=256; IND_int++) { INDCount++; Grid->RowCount=Grid->RowCount+1; // eine Zeile hinzufügen Grid->Cells[1][i+IND_int-f+INDCount]=ParamFile->ReadString("Parameters",AnsiString(i)+"."+AnsiString(IND_int),"100000");// ^Parameter aus INI-File lesen und in Tabelle einfügen if (Grid->Cells[1][i+IND_int-f+INDCount]=="100000") // Wenn beim auslesen aus Ini-File als Defaultwert 1000 eingefüllt wurde... break; else Grid->Cells[0][i+IND_int-f+INDCount]=AnsiString(i)+"."+AnsiString(IND_int);// Parameternummer einfügen à la system, das der IND-Wert hinter dem Punkt steht, z.B. 17.1 } } } }
Im INI-FIle steht:
[Parameters] 1=Achsart 2=Weg pro Getriebeumdrehung 3=Getriebeuntersetzungsfaktor 4=Anwendereinheit 5=Anwendergeschwindigkeit 6=Software-Endschalter Anfang 7=Software-Endschalter Ende 8=Referenzgeschwindigkeit 10=Maximalgeschwindigkeit 11=Positions-Zielbereich 12=Geschwindigkeits-Zielbereich 17=PI Verstärkung Geschwindigkeits-Regler (IND) 17.1=P Verstärkung 17.2=I Verstärkung 17.3=P Konstante Zähler 17.4=P Konstante Nenner 17.5=I Konstante Zähler 17.6=I Konstante Nenner 18=PI Verstärkung Positions-Regler (IND) 18.1=P Verstärkung 18.2=I Verstärkung 18.3=P Konstante Zähler 18.4=P Konstante Nenner 18.5=I Konstante Zähler 18.6=I Konstante Nenner 27=Drehmomentbeschränkung (IND) 27.1=Maximales Drehmoment 27.2=Drehstromkonstante 28=Maximalen Strom 29=Iststrom eff
und im TStringGrid:
[Parameters] 1 |Achsart 2 |Weg pro Getriebeumdrehung 3 |Getriebeuntersetzungsfaktor 4 |Anwendereinheit 5 |Anwendergeschwindigkeit 6 |Software-Endschalter Anfang 7 |Software-Endschalter Ende 8 |Referenzgeschwindigkeit 10 |Maximalgeschwindigkeit 11 |Positions-Zielbereich 12 |Geschwindigkeits-Zielbereich 17 |PI Verstärkung Geschwindigkeits-Regler (IND) 18 | 27 |P Verstärkung 28 | 29 |I Verstärkung 17.3 |PI Verstärkung Positions-Regler (IND) |Drehmomentbeschränkung (IND) 17.5 |Maximalen Strom |Iststrom eff
und es so sollte es drin stehen:
<snip> Viele andere Parametet</snip> 17 |PI Verstärkung Geschwindigkeits-Regler (IND) 17.1 |P Verstärkung 17.2 |I Verstärkung 17.3 |P Konstante Zähler 17.4 |P Konstante Nenner 17.5 |I Konstante Zähler 17.6 |I Konstante Nenner 18 |PI Verstärkung Positions-Regler
Was hab' ich mir falsch überelgt? Warum stimmt das nicht? Kann mir da jemand weiterhelfen? Vielen Dank!
-
hmmm, fällt mir auch nix zu ein.
aber warum versuchst du nicht mal das ini file als textfile zeilenweise einzulesen?
also jede zeile in einen string, dann string aufdröseln, und die werte links bzw rechts vom '=' dann ab ins stringgrid?
wäre vielleicht einfacher?
-
Okay got it!
Konnte es lösen!
wie? so hab' ichs gemacht:ParamFile = new TIniFile(ExtractFileDir(ParamStr(0)) + "\\Param.ini"); Grid->RowCount=0; // RowCount setzen AnsiString AlreadyUsed_AS=""; // Variable deklariert in der der bereits gebrdauchte IND-String gespeichert wird for (int i=1; i<=4096; i++) { Grid->RowCount=Grid->RowCount+1; // Eine Zeile hinzufügen Grid->FixedRows=1; // fixed rows für die beschriftung festlegen Grid->Cells[1][Grid->RowCount]=ParamFile->ReadString("Parameters",i,"100000");// ^Parameter aus INI-File lesen und in Tabelle einfügen if (Grid->Cells[1][Grid->RowCount]=="100000")// Wenn beim auslesen aus Ini-File als Defaultwert 1000 eingefüllt wurde... Grid->RowCount=Grid->RowCount-1;// Eine Zeile löschen else Grid->Cells[0][Grid->RowCount]=i;// Parameternummer einfügen if (Grid->Cells[1][Grid->RowCount].Pos("(IND)")&&Grid->Cells[1][Grid->RowCount]!=AlreadyUsed_AS)// Wenn (IND) irgendwo im Parameter steht { AlreadyUsed_AS=Grid->Cells[1][Grid->RowCount]; for (int IND_int=1; IND_int<=256; IND_int++) { Grid->RowCount=Grid->RowCount+1;// eine Zeile hinzufügen Grid->Cells[1][Grid->RowCount]=ParamFile->ReadString("Parameters",AnsiString(i)+"."+AnsiString(IND_int),"100000");// ^Parameter aus INI-File lesen und in Tabelle einfügen if (Grid->Cells[1][Grid->RowCount]=="100000")// Wenn beim auslesen aus Ini-File als Defaultwert 1000 eingefüllt wurde... { Grid->RowCount=Grid->RowCount-1;// Eine Zeile löschen break; } else Grid->Cells[0][Grid->RowCount]=AnsiString(i)+"."+AnsiString(IND_int);// Parameternummer einfügen à la system, das der IND-Wert hinter dem Punkt steht, z.B. 17.1 } } } }