| Autor |
Beitrag |
Smartie
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 07:20
Servus!
Nachdem ich es gestern doch noch geschafft habe, vom COM richtig zu elsen, und aus ner II was rauszulesen, gehts nun weiter.
Bisher sieht meine ini "ungefähr" so aus':
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| [F1] BN=0 Name=RFS Byte=6 Format=ASCII Bereich=6 [F2] BN=6 Name=WGR Byte=1 Format=Hex Bereich=1..7
... |
Da ich ca. bis F30 muß, und diese INI später verständlich sein soll, wäre mir eine Darstellung wie folgt "lieber".
Quelltext 1: 2: 3: 4:
| Funktion/BN/Name/Byte/Format/Bereich F1/0/RFS/6/ASCII/6 F2/6/WGR/1/Hex/1..7 ... |
Hat jemand ne Idee, wie ich das anstelle?
Danke und lieben Gruß
Smartie
Moderiert von Tino: Titel geändert.
|
|
DarkHunter
      
Beiträge: 477
Win XP
D3 Prof, D2005 PE
|
Verfasst: Mi 20.04.05 07:27
Da wäre es fast einfacher das ganze in eine Datenbank zu setzen
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 20.04.05 07:35
Morgen!
Smartie hat folgendes geschrieben: | | Hat jemand ne Idee, wie ich das anstelle? |
Ja, das ganze selbst programmieren. Also mit eine tStringList die Daten laden und dann mit Pos() oder mit Explode die einzelnen Zeilen zerlegen.
Gruß
Tino
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 20.04.05 07:49
Ich würde auch Tinos Empfehlung folgen.
Aber wozu muss die INI-Datei lesbar sein? Da soll doch wohl niemand manuell rumfummeln, oder?
INI benutzt man üblicherweise zum Speichern und Laden von Einstellungen. Das wird vom Programm gesteuert. Theoretisch macht es also keinen Sinn, dass die Datei lesbar sein muss.
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 07:52
DarkHunter hat folgendes geschrieben: | | Da wäre es fast einfacher das ganze in eine Datenbank zu setzen |
An sich ne gute Idee, nur leider nicht diskutable. Das sind meine Vorgaben welche ich gesetzt bekommen habe, und damit muß ich arbeiten. ichkann das ini zwar gestallten wie ichwill, aber an sich ist die "Zeilenlösung" übersichtlicher.
Das mit dem Expode hört sich intressant an, werd ich mir mal genauer ansehn, danke.
Lieben Gruß
Smartie
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 08:00
jasocul hat folgendes geschrieben: | Ich würde auch Tinos Empfehlung folgen.
Aber wozu muss die INI-Datei lesbar sein? Da soll doch wohl niemand manuell rumfummeln, oder?
|
Doch, da soll evtl. jemand späte mal rumfummeln. Es kann sein, das dies in ein paar Jahren notwendig sein wird, kann man nie wissen. Wenn z.B. plötzlich jemand meint, wir senden das Format für den Status nicht mehr in ASCII sodnern in HEX, so muß das in der INI geändert werden. Denn in der INI steht lediglich, wie Daten die über das COM geschickt werden zu interpretieren sind.
Lieben Gruß
Smartie
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 20.04.05 08:24
Smartie hat folgendes geschrieben: | | Doch, da soll evtl. jemand späte mal rumfummeln. Es kann sein, das dies in ein paar Jahren notwendig sein wird, kann man nie wissen. Wenn z.B. plötzlich jemand meint, wir senden das Format für den Status nicht mehr in ASCII sodnern in HEX, so muß das in der INI geändert werden. Denn in der INI steht lediglich, wie Daten die über das COM geschickt werden zu interpretieren sind. |
Wenn dann noch jemand weiß, dass das in der INI-Datei eingestellt werden kann.
Is schon OK. Wollte auch nur meine Bedenken von mir geben. Einstellungen sollten eigentlich immer über das Programm gesteuert werden. Bei der manuellen Änderungen von Einstellungsdateien kann einfach zu viel Mist verzapft werden. Auch unbeabsichtigt.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 20.04.05 08:36
Als Anmerkung bzgl.
| Zitat: | | Es kann sein, das dies in ein paar Jahren notwendig sein wird, kann man nie wissen. |
Falls du mal vorhast, auf .NET zu wechseln: Nach meinen bisherigen Recherchen gibt´s dort keine Klasse für INI-Dateien mehr. Es sei denn, überraschend wird eine in .NET 2.0 oder höher eingebaut. Darum solltest du dich vllt. auch mit Alternativen vertraut machen. Und da werfe ich mal als eine mögliche Alternative (von vielen) XML in den Raum. 
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 08:57
MathiasSimmack hat folgendes geschrieben: | Als Anmerkung bzgl.
| Zitat: | | Es kann sein, das dies in ein paar Jahren notwendig sein wird, kann man nie wissen. |
Falls du mal vorhast, auf .NET zu wechseln: Nach meinen bisherigen Recherchen gibt´s dort keine Klasse für INI-Dateien mehr. Es sei denn, überraschend wird eine in .NET 2.0 oder höher eingebaut. Darum solltest du dich vllt. auch mit Alternativen vertraut machen. Und da werfe ich mal als eine mögliche Alternative (von vielen) XML in den Raum.  |
jasocul hat folgendes geschrieben: |
Bei der manuellen Änderungen von Einstellungsdateien kann einfach zu viel Mist verzapft werden. Auch unbeabsichtigt.
|
Absolut richtig! Ihr habt beide Recht. Nur, ich bin es nicht der das entscheidet.
Ich mach ja auch nicht das ganze Projekt, sodnern es hieß von meinem Chef vor nicht ganz zwei Wochen "Gehen Sie in die Buchhandlung, holen Sie sich ein Buch über Delphi, arbeiten Sie sich ein, und dann machen Sie mal diese Anbindung über Delphi."
Und in diesem Projekt soll nunmal später, wenn ich längst nichts merh damit zu tun habe, der Anwender die Möglichkeit haben zu sagen "Ok, wir ändern da jetzt mal was".
aber, wenn wir schon dabei sind *g* Wie lese ich denn nun eine bestimmte Zeile aus der INI aus, da ich nun keine Sektionen mehr habe, sondern nur noch die Zeilen?
Lieben Gruß
Smartie
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Mi 20.04.05 09:11
Tja, immer diese bösen Chefs
Mitdenken und Hinweise auf eventuelle Probleme geben, mögen die aber manchmal. Na gut, ich kenne deinen Chef nicht.
Wie hast du es denn gespeichert. Ich meine das Verfahren. Inhaltlich ist das ja klar.
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 09:19
jasocul hat folgendes geschrieben: | Tja, immer diese bösen Chefs
Mitdenken und Hinweise auf eventuelle Probleme geben, mögen die aber manchmal. Na gut, ich kenne deinen Chef nicht.
Wie hast du es denn gespeichert. Ich meine das Verfahren. Inhaltlich ist das ja klar. |
Och, mein chef ist schwer in Ordnung! Er will halt auch das ichwas bei lerne, da ich bisher auser HTML kaum wirklich was programiert habe, finde ich es an sich ganz gut.
Und ich mache hier wie gesagt nur einen Teil des ganzen.
Gespeichert, du meinst die INI? Ich bin mir nicht ganz sicher, ob ich deine Frage verstehe. Naja, als stink normale INI-Datei mit dem Aufbau, wie weiter oben beschrieben. explode funktioniert übrigens Vorzüglich
Wer auch immer das geschrieben hat, ein Dankendes
Fuß zum Gruß
Smartie
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 20.04.05 09:35
Hallo!
Die INI-Klasse (TIni) musst du vergessen. Ich habe oben bereits geschrieben das Du die Verarbeitung am besten mit TStringList durchführst. Einfach mal in der Hilfe und hier im Forum nach TSTRINGLIST suchen. Dort findest Du einige Beispiel wie du mit Hilfe der TStringList eine Datei lädst und diese verarbeiten kannst.
Gruß
Tino
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 10:17
Hallo,
ok, Delphi-Hilfe hat ein paar Infos gegeben, war aber nicht das Ware. Hier im Forum hab ich was recht nettes gefunden. Ich sehs schon, ich hab wohl irgendwo Müll gebaut, weil sobald ich die ini öffne, bringt er mir eine Exception.
Delphi-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:
| procedure TForm1.Button1Click(Sender: TObject); var datei, z, rein, BN, Name, Byte, Format, Bereich : string; ini : TIniFile; exparr: TStringDynArray; zeilenarr : TStringDynArray;
begin if opendialog1.execute then datei := opendialog1.FileName
else datei := '';
begin MySList := TStringList.Create; MySList.LoadFromFile(datei);
for X := 0 to MySList.Count-1 do zeilenarr[x] := MySList.Strings[x];
MySList.Free; end; end; |
Ich hab schon gesucht, aber ich konnt keinen Fehler finden.
Sieht jemand was ich falsch gemacht hab?
Lieben Gruß
Smartie
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 20.04.05 10:27
Mit Farben und vernünftiger Einrückung sieht man besser:
Smartie hat folgendes geschrieben: | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.Button1Click(Sender: TObject); var datei, z, rein, BN, Name, Byte, Format, Bereich : string; ini : TIniFile; exparr: TStringDynArray; zeilenarr : TStringDynArray;
begin if opendialog1.execute then datei := opendialog1.FileName else datei := '';
begin MySList := TStringList.Create; MySList.LoadFromFile(datei);
for X := 0 to MySList.Count-1 do zeilenarr[x] := MySList.Strings[x];
MySList.Free; end; end; | |
Mal abgesehen von zwei kleinen "Dummheiten"  vermute ich, dass du deinem dynamischen Stringarray erst mal eine Größe zuweisen musst bevor du einzelne Felder belegen kannst.
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 12:04
MathiasSimmack hat folgendes geschrieben: | Mal abgesehen von zwei kleinen "Dummheiten" vermute ich, dass du deinem dynamischen Stringarray erst mal eine Größe zuweisen musst bevor du einzelne Felder belegen kannst. |
Darf ich erfahren welche du meinst?
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 20.04.05 12:35
Er meint die Variablendeklaration.  Da steht z.B. ini : TInifile. Delphi wird dir aber schon gesagt haben, daß das nirgendwo benutzt wird. Ich versuche solche Dinge zu beachten und von Anfang an zu beseitigen, zumindest wenn es mich stört.  Spätestens wenn ich was poste. Ansonsten sieht das mit Sicherheit irgendwer und ärgert dich damit. 
_________________ Gruß
Hansa
|
|
Smartie 
      
Beiträge: 205
|
Verfasst: Mi 20.04.05 12:36
Also, es läuft, und der Code sieht grad so aus:
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:
| procedure TForm1.Button1Click(Sender: TObject); var datei, F, BN, Name, Byte, Format, Bereich : String; exparr: TStringDynArray; zeilenarr : TZStringArr;
begin if opendialog1.execute then datei := opendialog1.FileName
else datei := '';
begin MySList := TStringList.Create; MySList.LoadFromFile(datei);
for X := 0 to MySList.Count-1 do zeilenarr[x] := MySList.Strings[x];
MySList.Free; end;
Folgendes nur für Testzwecke, später sicher NICHT so gelöst! exparr := explode('||', zeilenarr[5]);
F := exparr[0]; BN := exparr[1]; Name := exparr[2]; Byte := exparr[3]; Format := exparr[4]; Bereich := exparr[5];
label1.Caption := 'Funktion:' + F; label2.Caption := 'Byte_Nr :' + BN; label3.Caption := 'Name :' + Name; label4.Caption := 'Bytes :' + Byte; label5.Caption := 'Format :' + Format; label6.Caption := 'Bereich :' + Bereich;
end;
end. |
Wenn noch jemand was findet, was Bugs verursachen könnte, oder was unnötig drin ist, bin offen für derartige Vorschläge *g*
lieben Gruß und Danke,
Smartie
Moderiert von Gausi: Code- durch Delphi-Tags ersetzt.
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 20.04.05 13:01
Smartie hat folgendes geschrieben: | | Wenn noch jemand was findet, was Bugs verursachen könnte, oder was unnötig drin ist... |
Dir ist klar, daß jede Unklarheit für einen Fehler gut ist ? Insofern gelten allerdings auch die Allerwelts-Binsenweisheiten : formatiere den Quelltext (insbesondere Einrückungen und end in extra Zeile). Vor allem sind aussagekräftige Namen wichtig. In 2 Jahren wirst selbst du nicht mehr wissen was sich hinter Label1 usw. verbirgt.
_________________ Gruß
Hansa
|
|
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mi 20.04.05 13:27
|
|
Tino
      

Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: Mi 20.04.05 13:37
Hallo!
Warum kopierst du den Inhalt von der TStringList in die Variable zeilenarr? Arbeite doch direkt mit der TStringList. Dann brauchst du nicht rum kopieren (Zeile 19-23 in deinem Quellecode oben) und keine Arrays vergrößern.
Gruß
Tino
|
|