Tablica dwuwymiarowa do pliku np. xml

Tablica dwuwymiarowa do pliku np. xml
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam taką tablicę:

Kopiuj
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

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
1

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

Kopiuj
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

Kopiuj
Tablica[I, J] := INI.ReadString('Sekcja' + IntToStr(I), Klucz + IntToStr(J), 'wartosc');
OO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 98
0

Się męczysz.

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

A fuj to nie C# tylko Delphiok :D

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

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

Tak to zapisuje, to poprawne?:

Kopiuj
 [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 ?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10230
0

Powinno zapisać tak

Kopiuj
[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.

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
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

OO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 98
0

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

Kopiuj
data.SaveToFile("pliczek");
  • Rejestracja: dni
  • Ostatnio: dni
0

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

payl
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 196
1

Się męczycie.

Kopiuj
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;
  • Rejestracja: dni
  • Ostatnio: dni
0

Działa dziękuuuuuuuje :D !

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.