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
Wrzesień 12th, 2007 at 14:17
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
Wrzesień 13th, 2007 at 22:12
w/w link narazie projekt xD
btw i mnie zainspirowales. dzis przeprosilem sie z kompilatorem i pewnie pojde z nim do lozka xDDDDDdddddd
Wrzesień 16th, 2007 at 10:34
Bardzo fajny pomysł. Też coś takiego wymyśliłem kiedyś, ale w takim sensie, żeby to był okienkowy edytor dowolnych plików binarnych.