UDB

Kiedyś w jakimś edytorze hex widziałem bardzo fajną opcję. Otóż była tam możliwość opisania swojego formatu w pseudo-C, a program, który to interpretował, ładnie układał nam nagłówki plików czy inne dane, np. dla formatu ZIP czy BMP. Zainspirowało mnie to do stworzenia czegoś podobnego, ale nieco prostrzego w użytku i trochę pod innym kątem zastosowania.

UDB to skrót od Universal DataBase, ale nie ma on żadnego znaczenia, gdyż nie jest przeznaczony tylko do programowania baz danych. Pod tą tajemniczą nazwą kryje się biblioteka, która ułatwia definiowanie formatów plików oraz ich wczytywanie/zapisywanie.

Działanie jest następujące:

  • definiujemy format pliku za pomocą XML-a
  • piszemy program, który wczytuje definicje pliku
  • dowolnie wczytujemy naszym programem pliki, które mają opisany format pliku
  • możemy np. wczytać inny format i użyć zapisu pliku, wtedy dokona sie „konwersja” pliku

Wczytywać można zarówno pojedyńcze zmienne jak i tablice.

Oto przykładowy interpret („format pliku”):

<udb>
 
<stack>
  <version>0.0.0.3</version>
  <var type="string" name="var_string2[]">
  <var type="uint" name="var_looptimes">
<format>
 
  <data var_name="var_looptimes">
 
  <dataloop times_var="var_looptimes">
    <data type="string" name="var_string1[]" len="8">
    <data len="4" var_name="var_string2[]">
  </dataloop>
 
</format>
 
</udb>

A tutaj jego wykorzystanie w C++:

UDB* udb = new UDB;        
 
if( udb->loadInterpret( "sample_format.udb" ) != UDB_OK )
    error();   
 
udb->loadFile( "test.txt" );
udb->loadInterpret( "test3.udb" )        
 
//pobieramy i wyswietlamy ostatni string z tablicy var_string2[]
cout << udb->getVar( "var_string2[3]" ) ) << endl;   
 
udb->saveFile( "test_out.txt" );
udb->close();    
 
delete udb;

Na razie to dziala tylko w takim zakresie, więc nie publikuję tego jako lib, ale tylko jako informację. Mam takie pomysły jak dodanie znacznika explode (funkcjonalność jak funkcja o tej nazwie w PHP) czy wczytywanie jakiegoś bloku danych w do momentu znaku terminującego (po prostu „terminator”), jak było np. w starym bazodanowym formacie dBASE. III PLUS. Być może pomyśle jeszcze ew. o jakichś warunkach, ale co do tego nie jestem pewien, bo przestanie to już wyglądać jak XML :) Co o tym sądzicie?

3 odpowiedzi na temat “UDB”

  1. icek napisał:

    Bardzo ciekawy pomysl, zainspirowalo mnie to, do zrobienia czegos podobnego w moim libie (sockety) do definiowania roznych pakietow (a co za tym idzie – protokolu).
    BTW Namek, pamietam ten Hex edytor :D przypomniales mi w tej notce o nim

  2. deVastatoR napisał:

    w/w link narazie projekt xD

    btw i mnie zainspirowales. dzis przeprosilem sie z kompilatorem i pewnie pojde z nim do lozka xDDDDDdddddd

  3. Reg napisał:

    Bardzo fajny pomysł. Też coś takiego wymyśliłem kiedyś, ale w takim sensie, żeby to był okienkowy edytor dowolnych plików binarnych.

Zostaw odpowiedź