Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Vse drugo, kar ne spada v nobeno zgornjo kategorijo.
delfak
Prispevkov: 878
Pridružen: 24.05.2002 11:00:41

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a delfak » 20.01.2007 16:17:37

Lep pozdrav !

Na ftp od banke slovenije so tečajne liste v xml fotrmatu in ne več v txt formatu. Kako pridem do podatkov.



lp Delfak

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a Runner » 20.01.2007 17:07:18

A se hecaš?

Namesto da prebereš txt datoteko, pač preberi xml datoteko. Kje je tu sploh problem? Mogoče v načinu kako so sedaj podatki zapisani v xml?

delfak
Prispevkov: 878
Pridružen: 24.05.2002 11:00:41

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a delfak » 20.01.2007 18:23:15

Mnja sem se narobe izrazil. Kako parsam te podatke. kako je z vrsticami < > = '' a imakdo formulo ali izkušnje.


Nekaj sem študiral pa ni ne uspe. Prejšnje iz tekstovne datotete mi je pa ratalo narest.

lp delfak

delfak
Prispevkov: 878
Pridružen: 24.05.2002 11:00:41

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a delfak » 20.01.2007 18:25:01

Aha zdaj mi je jasno <tecajna oznaka> je zacetek </tecaj>je konec
vmes so podatki. Nisem prej mel wordwrap.

lp delfak

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a Runner » 20.01.2007 18:40:43

Ja uporabi enega izmed xml parserjev. Recimo tega ki je domače gore list : http://www.omnixml.com/.

Drugače pa imaš na netu hordo podatkov, tutorialov in knjig o xml-ju. Saj za osnovne zadeve je xml zelo preprost.
Zadnjič spremenil Runner, dne 20.01.2007 18:41:48, skupaj popravljeno 1 krat.

riko
Prispevkov: 444
Pridružen: 25.02.2004 12:40:57

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a riko » 21.01.2007 09:29:04

Tale funkcija, ki sicer ni lepa, dela pa, ti bo XML file konvertirala v staro obliko:

Koda: Izberi vse

  procedure ConvertToOldFormat;
  var
    S: string;
    L: TStringList;
    I, J: integer;
    D: extended;
  begin
    L := TStringList.Create;
    try
      DecimalSeparator := '.';
      L.LoadFromFile(AFileName);
      S := L.Strings[0];
      S := Copy(S, Pos('<tecajnica datum=', S), Length(S));
      S := StringReplace(S, '<tecajnica datum="', #13 + #10 + '>', [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '<tecaj oznaka="', #13 + #10, [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '" sifra="', ';', [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '">', ';', [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '</tecaj>', '', [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '</tecajnica>', '', [rfIgnoreCase, rfReplaceAll]);
      S := StringReplace(S, '</DtecBS>', '', [rfIgnoreCase, rfReplaceAll]);
      L.CommaText := S;
      J := 0;
      for I := 0 to L.Count - 1 do
        if LeftStr(L.Strings[I], 1) = '>' then
        begin
          Inc(J);
          S := Format('%.3d', [J]) + ';' +
            FormatDateTime('yyyyMMdd', EncodeDate(
            StrToInt(Copy(L.Strings[I], 2, 4)),
            StrToInt(Copy(L.Strings[I], 7, 2)),
            StrToInt(Copy(L.Strings[I], 10, 2))) + 1) + ';';
          L.Strings[I] := S + 'EUR;978;1.0';
        end
        else
          L.Strings[I] := S + L.Strings[I];
      I := 0;
      while I < L.Count do
      begin
        S := L.Strings[I];
        J := Length(S);
        while (S[J] <> ';') and (J > 0) do
          Dec(J);
        D := StrToFloat(RightStr(S, Length(S) - J));
        L.Strings[I] := LeftStr(S, J);
        D := 1. / D;
        S := Format('%.10f', [D]);
        while Length(S) < 14 do
          S := '0' + S;
        S := StringReplace(S, '.', ',', [rfReplaceAll]);
        L.Strings[I] := L.Strings[I] + S + ';' + S + ';' + S;
        Inc(I);
      end;
      L.Insert(0, 'Num;Date____;CCu;NCu;Buy___________;Middle________;Sell__________');
      L.Insert(1, 'Num;Datum___;KVa;NVa;Nakupni_______;Srednji_______;Prodajni______');
      L.Text := StringReplace(L.Text, ';', #9, [rfReplaceAll]);
      L.SaveToFile(AFileName);
    finally
      DecimalSeparator := ',';
      L.Free;
    end;
  end;
Zadnjič spremenil riko, dne 21.01.2007 09:31:54, skupaj popravljeno 1 krat.

delfak
Prispevkov: 878
Pridružen: 24.05.2002 11:00:41

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a delfak » 21.01.2007 11:43:58

Oj !

Hvali ti full riko. Tega nebi sam spravil nikoli skupaj. Mi pride pa zelo prav. Še enklra hvala.


lp Delfak

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a Runner » 21.01.2007 12:16:48

A mi lahko kdo razloži zakaj xml spreminjate v stari format in zakaj enostavno ne parsate xml-ja kar je veliko lažje?

delfak
Prispevkov: 878
Pridružen: 24.05.2002 11:00:41

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a delfak » 21.01.2007 13:38:34

Ja meni tako odgovarja ker ne rabim ostale kode popravljat. Samo kličem proceduro in program dela naprej.


lp Delfak

riko
Prispevkov: 444
Pridružen: 25.02.2004 12:40:57

Banka Slovenije tečajne liste so v xml formatu. Kako jih prebrati.

Odgovor Napisal/-a riko » 21.01.2007 13:53:48

Runner dobil si odgovor, zato da starih aplikacij ni potrebno popravljati, kajti v novi tečajnici so podatki koliko stane EUR,
v stari pa je bilo koliko stane tuja valuta SIT.
Kar se pa tiče parserjev je pa čisti balast komplicirat preprosto zadevo.

Odgovori