Tablica dwuwymiarowa do pliku np. xml

0

Mam taką tablicę:

Tablica : array[0..199, 0..4] of String;

Jak ją teraz w najprostszy sposób zapisać do pliku .xml by potem móc tą tablicą załadować z powrotem? Lub jakiś inny sposób bym mógł załadować moją tablicę po ponownym uruchomieniu programu

1

Możesz zapisać to do pliku INI, podzielonego na 5 sekcji o 200 kluczach.

procedure Zapisz;
var
  Tablica : array [0..4, 0..199] of String;
  INI: TINIFile;
  I, J : Integer;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'plik.ini');
  for I := 0 to 4 do
    for J := 0 to 199 do
      try
        INI.WriteString('Sekcja' + IntToStr(I), Klucz + IntToStr(J), Tablica[I, J]);
      finally
        INI.Free;
      end;
end;

Odczytujesz tak samo, tylko że linijkę INI.WriteString... zamień na

Tablica[I, J] := INI.ReadString('Sekcja' + IntToStr(I), Klucz + IntToStr(J), 'wartosc');
0

Się męczysz.

string[] data = System.IO.File.ReadAllLines("pliczek");
// pobranie elementu [x,y]
data[x*4+y];

A fuj to nie C# tylko Delphiok :D

var data:TStringList;
...
data:=TStringList.Create();
data.LoadFromFile('pliczek');
// pobranie elementu [x,y]
data[x*5+y];
0

Pierwszy kod mi nie działa poprawnie, dziwnie to zapisuje i nie potrafi odczytać:

Tak to zapisuje, to poprawne?:

 [Sekcja0]
Klucz0=tablica 0 element 0
Klucz1=tablica 0 element 1
Klucz2=tablica 0 element 2
Klucz3=tablica 0 element 3
Klucz4=tablica 0 element 4
Klucz5=tablica 1 element 0
Klucz6=tablica 1 element 1
Klucz7=tablica 1 element 2
Klucz8=tablica 1 element 3
Klucz9=tablica 1 element 4
Klucz10=
Klucz11=
Klucz12=
Klucz13=

Co do drugiego kodu to to samo odczytywanie stringlist z pliku, gdzie tu zapis tablicy ?

0

Powinno zapisać tak

[Sekcja1]
Klucz1=ElementTablicy1na1
Klucz1=ElementTablicy1na2
Klucz1=ElementTablicy1na3
[...]
[Sekcja2]
Klucz1=ElementTablicy2na1
Klucz1=ElementTablicy2na2
Klucz1=ElementTablicy2na3
[...]
[Sekcja3]
Klucz1=ElementTablicy3na1
Klucz1=ElementTablicy3na2
Klucz1=ElementTablicy3na3
[...]

edit: Według mojego kodu.

0
procedure TForm1.Zapisz;
var
  INI: TINIFile;
  I, J : Integer;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'plik.ini');
  for I := 0 to 4 do
    for J := 0 to 199 do
      try
        INI.WriteString('Sekcja' + IntToStr(I), 'Klucz' + IntToStr(J), Posty[I, J]);
      finally
        //INI.Free;
        posty.
      end;
end;

procedure TForm1.Otworz;
var
  INI: TINIFile;
  I, J : Integer;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'plik.ini');
  for I := 0 to 4 do
    for J := 0 to 199 do
      try
        Posty[I, J] := INI.ReadString('Sekcja' + IntToStr(I), 'Klucz' + IntToStr(J), 'wartosc');
      finally
        //INI.Free;
      end;
end;

INI.Free musiałem tymczasowo dać w komentarz bo powoduje błąd acces violation nie wiem czemu ;/ Ale i tak zapisuje źle

0

A więc twierdzisz że nie potrafisz zapisać StringList do pliku?
<przerwa na śmiech>

data.SaveToFile("pliczek");
0

To wiem ale to stringlist, jak to powiązać z tablicą?

1

Się męczycie.

procedure TForm1.Zapisz;
var
  INI: TINIFile;
  I, J : Integer;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'plik.ini');
  try
  for I := 0 to 4 do
    for J := 0 to 199 do INI.WriteString('Sekcja' + IntToStr(I), 'Klucz' + IntToStr(J), Posty[I, J]);
  finally
  INI.Free;
  end;
end;
 
procedure TForm1.Otworz;
var
  INI: TINIFile;
  I, J : Integer;
begin
  INI := TINIFile.Create(ExtractFilePath(Application.ExeName) + 'plik.ini');
  try
  for I := 0 to 4 do
    for J := 0 to 199 do Posty[I, J] := INI.ReadString('Sekcja' + IntToStr(I), 'Klucz' + IntToStr(J), 'wartosc');
  finally
    INI.Free;
  end;
end;
0

Działa dziękuuuuuuuje :D !

1 użytkowników online, w tym zalogowanych: 0, gości: 1