Avatar billede ALS Praktikant
07. marts 2005 - 14:09 Der er 4 kommentarer og
2 løsninger

Array of Bytes i en INI-file

Hvordan gemmer/henter man smartest et Array of Bytes i en INI-file?
Avatar billede pellelil Nybegynder
07. marts 2005 - 14:35 #1
Jeg ville vælge at skrive et antal i et felt for sig, og herefter hver værdi med sin egen nøgle:
<SNIP>
[SECTION]
COUNT=3
VALUE1=123
VALUE2=7
VALUE3=47
</SNIP>
Avatar billede ALS Praktikant
07. marts 2005 - 14:54 #2
pellelil >> Tak for dit svar :o)

Hehe, helt så simpelt er det ikke.
Mit array er 32x8 bytes, så det bliver noget rodet på den måde.
Jeg har set en syntax i stil med dette i en INI-fil, men kan ikke finde en måde at læse/skrive værdien:

<SNIP>
[SECTION]
VALUE=1,2,3,4,5,6,7,8
</SNIP>
Avatar billede doc404 Novice
07. marts 2005 - 15:12 #3
Jeg bruger en generel funktion som kan hive et item ud af en liste. Se nederst.

Du kan selv rode videre,hvis det er en multidimensionel array

Når du skal indlæse fra ini filen

s := ini.ReadString('data');
for i := Low(MyArray) to High(MyArray) do
  MyArray[i] := StrToIntDef(GetSubstring(s,i),0);

Når du skal skrive til ini filen

s := IntToStr(MyArray[0]);
for i := 1 to High(MyArray) do
  s := s + ',' + IntToStr(MyArray[i]);

Ini.WriteString('data',s);

ps : er ikke sikker på ini syntaxen, men den kender du sikkert.


function GetSubString(const InStr : string; Index : integer; Sep : char = ',') : string;
var
  p,q : PChar;
  Quote : Char;
begin
  Result := '';
  p := PChar(InStr);
  while p^ in [' '] do Inc(p);
  if p^ = #0 then
    Exit;
  repeat
    while p^ in [' '] do Inc(p);
    q := p;

    if (q^ = '"') or (q^ = '''') then
      begin
        Quote := q^;
        Inc(q);
        while not ((q^ = Quote) or (q^ = #0)) do Inc(q);
      end
    else
      while not (q^ in [Sep,#0]) do Inc(q);

    if Index = 0 then
      begin
        SetString(Result,p,q-p);
        Result := Trim(Result);
        Exit;
      end;
    p := q;
    if p^ = Sep then
      begin
        Dec(Index);
        if Index < 0 then Exit;
        Inc(p);
      end;
  until p^ = #0;
end;
Avatar billede ALS Praktikant
07. marts 2005 - 18:01 #4
doc404 >> Takker :o)

Efter at have rettet et par småfejl virker det perfekt.
Avatar billede pellelil Nybegynder
07. marts 2005 - 19:06 #5
Eftersom ini-filer er ascii-baseret så vil der være tegn der ikke "egner" sig til at blive brugt, så en anden mulighed kunne også være at MIME-Encode dine data direkte.
Avatar billede ALS Praktikant
07. marts 2005 - 22:21 #6
pellelil >> Det er ikke rigtigt.
Værdierne skrives jo som ASCII-strenge og det er netop derfor jeg vælger at anvende en INI-fil, da brugeren nemlig editere data direkte i Notepad.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester