Autor Beitrag
oOXTCOo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 03:41 
schon wieder ein problem...

ich versuche eine ini datei auzulesen und einfach zum testen ins memo schreiben.

mit dem code;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
  try
    Ini:=TIniFile.Create('c:\test.ini');
    memo1.Text:=Ini.ReadString('[120]',
                     '0','Keine Daten!');

  finally
    Ini.Free;
  end;


doch es wird nichts erstellt?
auch wird nichts gelesen wenn die datei exestiert...

worann kann es liegen?

volle rechte habe ich natürlich und ordner sind nicht schreibgeschützt...

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 09.06.09 05:01 
Erstens wendest du den Ressourcenschutzblock falsch an:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  Ini := TIniFile.Create('c:\test.ini');
  try
    Memo1.Text := Ini.ReadString('[120]''0''Keine Daten!');
  finally
    Ini.Free;
  end;
Zweitens: Wie sieht denn die INI aus?
Dem Quelltext nach müsste die ja so aussehen:
ausblenden Quelltext
1:
2:
[[120]]
0=Test
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 09.06.09 07:23 
Mal davon abgesehen, daß die Zeile

ausblenden Delphi-Quelltext
1:
Ini:=TIniFile.Create('c:\test.ini');					


vor Try stehen muß, da dieser Bereich nicht geschützt werden muß, denn wenn es nicht klappt, dann klappt es eben nicht, dann muß Free auch kein Speicher freigeben, weil er nicht reserviert wurde, ist kein Fehler zu sehen. Ach ist Create im Try-Block kein Fehler, es muß nur nicht sein. Die Unit ist wohl angegeben und die Variable deklariert, sonst hättest du eine Fehlermeldung.

Da du nur liest gibt es auch keine Fehlermeldung wenn es die Datei unter 'c:\test.ini' nicht gibt. Wenn es die Datei nicht gibt, dann kommt eben der Default-Wert zum Einsatz, also eben 'Keine Daten!'.

'Keine Daten!' wird also angegeben wenn die Ini-Datei nicht existiert oder der Schlüssel nicht vorhanden ist. Wenn nichts kommt, also leerer String, dann ist der Schlüssel da, aber kein Wert.

Also die Ini ist eigentlich Idiotensicher. Irgendwas kommt auf jeden Fall, oder zumindest die Fehlermeldung.

_________________
Popov
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 09.06.09 07:26 
Der Fehler dürfte schlicht und einfach sein, dass die INI eben nicht so aussieht:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dem Quelltext nach müsste die ja so aussehen:
ausblenden Quelltext
1:
2:
[[120]]
0=Test
sondern so:
ausblenden Quelltext
1:
2:
[120]
0=Test
;-)
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Di 09.06.09 07:42 
user profile iconoOXTCOo hat folgendes geschrieben Zum zitierten Posting springen:

ich versuche eine ini datei auzulesen und einfach zum testen ins memo schreiben.


Der Fehler liegt im Read, das muesste so aussehen
ausblenden Delphi-Quelltext
1:
  memo1.Text:=Ini.ReadString('120''0','Keine Daten!');					

Also keine eckigen Klammern, die ergaenzt TInifile selbst. Es sei denn, Deine Ini enthaelt eine Section [[120]] - also mit doppelten Klammern - was ich nicht annehme.

Zitat:

doch es wird nichts erstellt?


Erstellt wird eine .ini nur, wenn man in sie schreibt.

twm

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 09.06.09 08:07 
Am besten so machen und gucken wo es rauskommt ;)

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  Ini := TIniFile.Create('c:\test.ini');
  try
    Ini.WriteString('[120]''0', Memo1.Text);
  finally
    Ini.Free;
  end;

_________________
Popov
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 14:30 
danke jetzt klapps...

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

sorry das ich schon wieder fragen muss aber diese misst ini files wollen nicht so wie ich will ;)


ich habe den code nun so geschrieben:

ausblenden volle Höhe 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:
26:
27:
28:
29:
30:
31:
procedure TForm1.Button7Click(Sender: TObject);
var
  Ini: TIniFile;
  pmname, pmini :string;
  pmlen, i:integer;
begin



opendialog1.filter:='*.pm';
 if OpenDialog1.Execute then
   pmname:=(Opendialog1.FileName);



 Ini := TIniFile.Create(pmname);
  try
  //Ini.WriteString('120', '0', Memo1.Text);
  pmini:=Ini.ReadString('120''0','Keine Daten!'); // HIER LESE ICH DEN INHALT IN DIE VARIABEL
  finally
    Ini.Free;
  end;

pmlen:=(length(pmini));    // HIER SOLL DIE LÄNGE VON DER SECTION 120, 0 FESTGESTELLT WERDEN

for i:= 1 to pmlen do begin      // JETZT DIE SCHLEIFE, DAMIT SOLL ERMIT DEN INHALT MIT
//memo1.lines.add('TEST : ' + inttostr(i) );  // JEWEILS EINEM BYTE (2 ZEICHEN) IN EINE
pmodd[i]:=pmini[i] + pmini[i + 1];            // VARIABEL SCHREIBEN
memo1.lines.add(pmodd[i]);
pmlen:= pmlen + 1//<-- hab das hier versucht damit er mit eines überspringt, geht aber nicht
end;

nun habe ich das problem das er natürlich immer zwei zeichen nimmt aber im nächsten wieder
das zeichen von vorheringen was ja klar ist...

was mit aber nicht klar ist, wenn ich diese zeile in die schleife schreibe
ausblenden Delphi-Quelltext
1:
pmlen:= pmlen + 1;					
sollte er ja praktisch immer einen auslassen oder habe ich da einen denk fehler?

oder wie kann man es sonst noch hin bekommen?


die zeile die ich einlese sieht so aus:
ausblenden Quelltext
1:
2:
3:
0000000000000000219010000000000000180200000000000028000001FFFFFF003
C000001FFFFFF000000003F007F206F07FFFFF800005003000502000000007FFF6F
07FFFFFFFFF80000530300050221901F21901FFFFF

es sieht dann aber immer so aus:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
00
00
00
00
00
00
00
00
00
00
00
00
00
00
00
02
21
... (gekürzt)

nun soll immer ein byte in ein array gespeicher werden.

also so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
pmodd[1]:=$00;
pmeven[1]:=$00;
pmodd[2]:$00;
pmeven[2]:=$00;

uns so weiter bis alle zeichen in die arrays gespeichert wurden...
damit kann ich dann pratkisch die checksumme berechnen und weiter senden (das ist kein problem).

wenn ich dann wissen will wiviele array verwendet wurden, muss ich ja nur
pmlent durch 4 teilen, dann habe ich jeweils die länge der odd variablen und jweils der even variabeln ?

Moderiert von user profile iconNarses: Quote- in Delphi-Tags geändert, Formatierungs überarbeitet

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

ach schon klar, pmlen ist ja die end länge...

aber so:
ausblenden Delphi-Quelltext
1:
i:= i + 1;					
klappts auch nicht...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
pmlen:=(length(pmini));

for i:= 1 to pmlen do begin

pmodd[i]:=pmini[i] + pmini[i + 1];
pmeven[i]:=pmini[i + 3] + pmini[i + 4];

i:= (i + 4);
end;

klappt alles nicht :(

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Di 09.06.09 17:44 
Hallo,

entweder du nimmst eine while-Schleife, etwa so(Randbedingungen nicht berücksichtigt):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
i := 1;
while i < Length(s) do
  begin
  //zwei Zeichen lesen
  inc(i,2);
  end;

oder Du arbeitest mit mod:
ausblenden Delphi-Quelltext
1:
2:
3:
for z := 1 to length(s) do
  if z mod 2 = 1 then
   //zwei Zeichen lesen

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 09.06.09 19:31 
user profile iconoOXTCOo hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden 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:
procedure TForm1.Button7Click(Sender: TObject);
var
  Ini: TIniFile;
  pmname, pmini :string;
  pmlen, i:integer;
begin



opendialog1.filter:='*.pm';
 if OpenDialog1.Execute then
   pmname:=(Opendialog1.FileName);



 Ini := TIniFile.Create(pmname);
  try
  //Ini.WriteString('120', '0', Memo1.Text);
  pmini:=Ini.ReadString('120''0','Keine Daten!'); // HIER LESE ICH DEN INHALT IN DIE VARIABEL
  finally
    Ini.Free;
  end;

...


Hier hast du jetzt einen bösen Fehler der dir um die Ohren fliegen kann. Du fragst zwar über OpenDialog den Dateinamen ab, aber die Routine mit der Ini wird durchgeführt egal ob du Ok oder Abbrechen Button im OpenDialog geklickt hast. Besser ist so:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
opendialog1.filter:='*.pm';
 if OpenDialog1.Execute then
  begin
   pmname:=(Opendialog1.FileName);



    Ini := TIniFile.Create(pmname);
     try
     //Ini.WriteString('120', '0', Memo1.Text);
     pmini:=Ini.ReadString('120''0','Keine Daten!'); // HIER LESE ICH DEN INHALT IN DIE VARIABEL
     finally
       Ini.Free;
     end;

     ...
   end;


Pack den Rest in den Block der ausgeführt wird wenn Ok geklickt wird. Wird jetzt Abbrechen wird der Teil ignoriert.

_________________
Popov
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 20:15 
danke danke danke!

werde ich gleich mal ausprobieren...
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 09.06.09 20:59 
Ich verstehe zwar noch nicht ganz was du willst, aber ich glaube du willst eine Zeile mit Hex Zahlen in zweier Werte zerlegen.

Hier eine kleine Routine die das sehr einfach macht. Sie ist zwar nicht elegant, aber auch nicht peinlich. Sie ist einfach nur einfach und verständlich.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var
  s, s2: String;
begin
  s := '0000000000000000219010000000000000180200000000000028000001FFFFFF003' +
       'C000001FFFFFF000000003F007F206F07FFFFF800005003000502000000007FFF6F' +
       '07FFFFFFFFF80000530300050221901F21901FFFFF';

  while Length(s) > 0 do
  begin
    s2 := Copy(s, 12);
    Delete(s, 12);

    ListBox1.Items.Add(s2);
  end;
end;

_________________
Popov
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 21:06 
PERFEKT DANKE!

mit dem ersten code habe ichs nicht so hinbekommen wie ichs brauche,
dafür aber mit dem zweiten.

habs so gemacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
for i := 0 to pmlen do
  if i mod 4 = 1 then  begin
   //zwei Zeichen lesen
    pmodd[j]:=pmini[i] + pmini[i + 1];
    pmeven[j]:=pmini[i + 2] + pmini[i + 3];
    memo1.lines.add('ODD  ' + inttostr(j) + ': ' +  pmodd[j]);
    memo1.lines.add('EVEN ' + inttostr(j) + ': ' +  pmeven[j]);
    J:=(J+1);
  end;



jetzt passts, jetzt kommt das gewünschte ergebnis so raus wie es soll:

ausblenden volle Höhe 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:
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:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
ODD  100
EVEN 100
ODD  200
EVEN 200
ODD  300
EVEN 300
ODD  400
EVEN 400
ODD  521
EVEN 590
ODD  610
EVEN 600
ODD  700
EVEN 700
ODD  800
EVEN 800
ODD  900
EVEN 918
ODD  1002
EVEN 1000
ODD  1100
EVEN 1100
ODD  1200
EVEN 1200
ODD  1300
EVEN 1328
ODD  1400
EVEN 1400
ODD  1501
EVEN 15: FF
ODD  16: FF
EVEN 16: FF
ODD  1700
EVEN 173C
ODD  1800
EVEN 1800
ODD  1901
EVEN 19: FF
ODD  20: FF
EVEN 20: FF
ODD  2100
EVEN 2100
ODD  2200
EVEN 2200
ODD  233F
EVEN 2300
ODD  247F
EVEN 2420
ODD  256F
EVEN 2507
ODD  26: FF
EVEN 26: FF
ODD  27: F8
EVEN 2700
ODD  2800
EVEN 2850
ODD  2903
EVEN 2900
ODD  3005
EVEN 3002
ODD  3100
EVEN 3100
ODD  3200
EVEN 3200
ODD  337F
EVEN 33: FF
ODD  346F
EVEN 3407
ODD  35: FF
EVEN 35: FF
ODD  36: FF
EVEN 36: FF
ODD  37: F8
EVEN 3700
ODD  3800
EVEN 3853
ODD  3903
EVEN 3900
ODD  4005
EVEN 4002
ODD  4121
EVEN 4190
ODD  421F
EVEN 4221
ODD  4390
EVEN 431F
ODD  44: FF
EVEN 44: FF




danke nochmals!
oki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

Win XP
Delphi 2007 Prof
BeitragVerfasst: Di 09.06.09 21:42 
Hallo,

hier noch mal ein Nachtrag von mir. Der Beitrag ist in der Zwischenzeit abhandengekommen. Ich möchte ihn aber trotzdem noch mal hier einfügen.

Zeig doch mal deine Ini-Datei. Das sieht alles sehr umständlich aus was du da machst. Schau dir doch mal ReadSection der Klasse TIniFile an. Ich denke das ist eine Überlegung wert.

Für das zerlegen eines Strings in einzelne Wordsegmente (du redest immer von Byte schreibst aber $00 usw.) reicht eine Schleife:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
var OddArr, EvenArr : Array of Word;
    Even : Boolean;
...
SetLength(OddArr, Length(pmini) div 2);
SetLength(EvenArr, Length(pmini) div 2);
Even := True;
For Counter := 1 to Length(pmini) do begin
  if not odd(Counter) then begin
    if Even then
      EvenArr[Counter div 4] := InttoStr(Copy(pmini, Counter, 2))
    else
      OddArr[Counter div 4] := InttoStr(Copy(pmini, Counter, 2));
    Even := not Even;
  end;
end;


Ich hab das jetzt mal so live getippt. Hoffe nichts vergessen zu haben.

Gruß oki

_________________
42
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 22:24 
hier ist die ini...


aber so wie ich jetzt habe funktioniets super...
Einloggen, um Attachments anzusehen!
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Di 09.06.09 23:02 
Nur mal so als Info. Wenn du eine Datei nur mit Schlüsseln und Werten hast, also keine weiteren Sektionen, dann brauchst du auch keine Ini zu bemühen. Das geht auch mit Stringlist. Hier ein Beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
  Path: String;
  s, s2: String;
  sl: TStringList;
begin
  Path := ExtractFilePath(ParamStr(0)) + 'RM-400_353103020937301_120_120.pm';

  sl := TStringList.Create;
  try
    if FileExists(Path) then
    begin
      sl.LoadFromFile(Path);

      s := sl.Values['0'];

      {...}
    end;
  finally
    sl.Free;
  end;

end;

_________________
Popov
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Di 09.06.09 23:59 
danke dir, bin aber froh das es nun läuft ;)

habs jetzt schon fast komplett am laufen:


ausblenden volle Höhe 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:
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:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
FT_out_Buffer[0]:=$1E
FT_out_Buffer[1]:=$00
FT_out_Buffer[2]:=$10
FT_out_Buffer[3]:=$23
FT_out_Buffer[4]:=$00
FT_out_Buffer[5]:=$68
FT_out_Buffer[6]:=$00
FT_out_Buffer[7]:=$08
FT_out_Buffer[8]:=$01
FT_out_Buffer[9]:=$02
FT_out_Buffer[10]:=$00
FT_out_Buffer[11]:=$78
FT_out_Buffer[12]:=$00
FT_out_Buffer[13]:=$00
FT_out_Buffer[14]:=$00
FT_out_Buffer[15]:=$00
FT_out_Buffer[16]:=$00
FT_out_Buffer[17]:=$00
FT_out_Buffer[18]:=$00
FT_out_Buffer[19]:=$58
FT_out_Buffer[20]:=$00
FT_out_Buffer[21]:=$00
FT_out_Buffer[22]:=$00
FT_out_Buffer[23]:=$00
FT_out_Buffer[24]:=$00
FT_out_Buffer[25]:=$00
FT_out_Buffer[26]:=$00
FT_out_Buffer[27]:=$00
FT_out_Buffer[28]:=$21
FT_out_Buffer[29]:=$90
FT_out_Buffer[30]:=$10
FT_out_Buffer[31]:=$00
FT_out_Buffer[32]:=$00
FT_out_Buffer[33]:=$00
FT_out_Buffer[34]:=$00
FT_out_Buffer[35]:=$00
FT_out_Buffer[36]:=$00
FT_out_Buffer[37]:=$18
FT_out_Buffer[38]:=$02
FT_out_Buffer[39]:=$00
FT_out_Buffer[40]:=$00
FT_out_Buffer[41]:=$00
FT_out_Buffer[42]:=$00
FT_out_Buffer[43]:=$00
FT_out_Buffer[44]:=$00
FT_out_Buffer[45]:=$28
FT_out_Buffer[46]:=$00
FT_out_Buffer[47]:=$00
FT_out_Buffer[48]:=$01
FT_out_Buffer[49]:=$FF
FT_out_Buffer[50]:=$FF
FT_out_Buffer[51]:=$FF
FT_out_Buffer[52]:=$00
FT_out_Buffer[53]:=$3C
FT_out_Buffer[54]:=$00
FT_out_Buffer[55]:=$00
FT_out_Buffer[56]:=$01
FT_out_Buffer[57]:=$FF
FT_out_Buffer[58]:=$FF
FT_out_Buffer[59]:=$FF
FT_out_Buffer[60]:=$00
FT_out_Buffer[61]:=$00
FT_out_Buffer[62]:=$00
FT_out_Buffer[63]:=$00
FT_out_Buffer[64]:=$3F
FT_out_Buffer[65]:=$00
FT_out_Buffer[66]:=$7F
FT_out_Buffer[67]:=$20
FT_out_Buffer[68]:=$6F
FT_out_Buffer[69]:=$07
FT_out_Buffer[70]:=$FF
FT_out_Buffer[71]:=$FF
FT_out_Buffer[72]:=$F8
FT_out_Buffer[73]:=$00
FT_out_Buffer[74]:=$00
FT_out_Buffer[75]:=$50
FT_out_Buffer[76]:=$03
FT_out_Buffer[77]:=$00
FT_out_Buffer[78]:=$05
FT_out_Buffer[79]:=$02
FT_out_Buffer[80]:=$00
FT_out_Buffer[81]:=$00
FT_out_Buffer[82]:=$00
FT_out_Buffer[83]:=$00
FT_out_Buffer[84]:=$7F
FT_out_Buffer[85]:=$FF
FT_out_Buffer[86]:=$6F
FT_out_Buffer[87]:=$07
FT_out_Buffer[88]:=$FF
FT_out_Buffer[89]:=$FF
FT_out_Buffer[90]:=$FF
FT_out_Buffer[91]:=$FF
FT_out_Buffer[92]:=$F8
FT_out_Buffer[93]:=$00
FT_out_Buffer[94]:=$00
FT_out_Buffer[95]:=$53
FT_out_Buffer[96]:=$03
FT_out_Buffer[97]:=$00
FT_out_Buffer[98]:=$05
FT_out_Buffer[99]:=$02
FT_out_Buffer[100]:=$21
FT_out_Buffer[101]:=$90
FT_out_Buffer[102]:=$1F
FT_out_Buffer[103]:=$21
FT_out_Buffer[104]:=$90
FT_out_Buffer[105]:=$1F
FT_out_Buffer[106]:=$FF
FT_out_Buffer[107]:=$FF
FT_out_Buffer[108]:=$01
FT_out_Buffer[109]:=$43
FT_out_Buffer[110]:=$AC
FT_out_Buffer[111]:=$CC



so wirds weiter zum ftdi device gesendet...

der buffer 109 ist die sequence nummer
der buffer 110 ist die odd checksumme
der buffer 111 ist die even checksumme


ich habe nur noch ein problem mit den beiden checksummen...

ins memo kann ichs so schreiben, aber wenn ichs direkt
so in den ft buffer schreiben will bekomme ich die fehlermeldung:

[Fehler] Unit1.pas(4672): Inkompatible Typen: 'Byte' und 'String'


das liegt jetzt aber darann das ich arrays statt normale variablen verwende...

gibt es eine möglichkeit byte zu string zu konvertieren?

oder das array umzuwandeln?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 10.06.09 00:00 
Du meinst wohl Byte zu Char, oder? Den Buchstaben zu einem Asciicode bekommst du mit Chr.
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Mi 10.06.09 00:11 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Du meinst wohl Byte zu Char, oder? Den Buchstaben zu einem Asciicode bekommst du mit Chr.



ich poste mal das stück source code was ich habe und fast funktioniert:

ausblenden volle Höhe 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:
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:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
opendialog1.filter:='*.pm';
 if OpenDialog1.Execute then
  begin
   pmname:=(Opendialog1.FileName);

    Ini := TIniFile.Create(pmname);
     try
 //    Ini.WriteString('120', '0', Memo1.Text);
     pmini:=Ini.ReadString('120''0','Keine Daten!'); // HIER LESE ICH DEN INHALT IN DIE VARIABEL
     finally
       Ini.Free;
     end;


J:=11;
pmlen:=(length(pmini));

for i := 0 to pmlen do
  if i mod 4 = 1 then  begin
   //zwei Zeichen lesen
    pmodd[j]:='$' + pmini[i] + pmini[i + 1];
    pmeven[j]:='$' + pmini[i + 2] + pmini[i + 3];
    memo2.lines.add('ODD  ' + inttostr(j) + ': ' +  pmodd[j]);
    memo2.lines.add('EVEN ' + inttostr(j) + ': ' +  pmeven[j]);
    J:=(J+1);
  end;



pmodd[1]:='$1E';
pmeven[1]:='$00';
pmodd[2]:='$10';
pmeven[2]:='$23';
pmodd[3]:='$00';    //<- MSG LENGTH
pmeven[3]:='$68';   //<- MSG LENGTH
pmodd[4]:='$00';
pmeven[4]:='$08';
pmodd[5]:='$01';
pmeven[5]:='$02';
pmodd[6]:='$00';
pmeven[6]:='$78';
pmodd[7]:='$00';
pmeven[7]:='$00';
pmodd[8]:='$00';
pmeven[8]:='$00';
pmodd[9]:='$00';
pmeven[9]:='$00';
pmodd[10]:='$00';
pmeven[10]:='$58';
pmodd[55]:='$01';
pmeven[55]:='$43';   //<-SEQUENCE NUMBER  (40 bis 48)

pmbuffer:='$';
pmbuffer2:='$';


memo2.lines.add('ODD_RESULT: ' + inttostr(oddresult));

oddresult:=$;
evenresult:=$;


  pmlen:= (pmlen div 4 );  // durch vier teile, damit ich jewils die länge von odd und even habe.
  pmlen:= (pmlen +  11 );  // 12 für die f-bus commands, sequence, odd checksumme

//memo2.lines.add(inttostr(pmlen));

for i:=1 to pmlen do begin
oddresult:= oddresult xor
strtoint(pmodd[i]);
end;
memo2.lines.add('ODD_RESULT: ' + inttostr(oddresult));


for i:=1 to pmlen do begin
evenresult:= evenresult xor
strtoint(pmeven[i]);
end;
memo2.lines.add('EVEN_RESULT: ' + inttostr(evenresult));

memo2.lines.add('ODD  CHECKSUM = ' + IntToHex(oddresult, 1));
memo2.lines.add('EVEN CHECKSUM = ' + IntToHex(evenresult, 1));

Soddresult:= ('$' + IntToHex(oddresult, 1));
Sevenresult:=('$' + IntToHex(evenresult, 1));

memo2.Lines.add('SO WIRDS EINGEFÜGT: ' + SoddResult);
memo2.LineS.add('SO WIRDS EINGEFÜGT: ' + SevenResult);

J:=0;

for i:=1 to pmlen do begin
pmbuffer:=pmodd[i];
pmbuffer2:=pmeven[i];
//FT_out_Buffer[i]:=pmbuffer;
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + pmodd[i]);
J:=j+1;
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + pmeven[i]);
J:=J+1;
end;

FT_out_Buffer[j]:=soddresult; //<- ODD CHECKSUM   AC
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + Soddresult);
j:= (j + 1);  // ODD CHECKSUMME EINFÜGEN
FT_out_Buffer[j]:=sevenresult; //<- EVEN CHECKSUM  CC
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + Sevenresult);









hier liegt das problem:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
FT_out_Buffer[j]:=soddresult; //<- ODD CHECKSUM   AC
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + Soddresult);
j:= (j + 1);  // ODD CHECKSUMME EINFÜGEN
FT_out_Buffer[j]:=sevenresult; //<- EVEN CHECKSUM  CC
memo2.lines.add('FT_out_Buffer['+ inttostr(j) +']:=' + Sevenresult);


ins memom wirds richitg geschrieben so wie ichs brauche...
aber in den ft_buffer bekomme ich die oben genannte fehlermeldung...


Zuletzt bearbeitet von oOXTCOo am Mi 10.06.09 00:15, insgesamt 1-mal bearbeitet
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: Mi 10.06.09 00:12 
Du kannst Char oder Byte auch bei Arrays haben, du mußt es nur so deklarieren.

_________________
Popov
oOXTCOo Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 141

Windows XP Prof. 3
Delphi 7
BeitragVerfasst: Mi 10.06.09 00:17 
user profile iconPopov hat folgendes geschrieben Zum zitierten Posting springen:
Du kannst Char oder Byte auch bei Arrays haben, du mußt es nur so deklarieren.


und wie mache ich das?

bzw. umwandeln geht nicht?
denn ich habe nur noch mit den beiden checksummen das problem, dann würde es laufen...