أعجوبة

البرمجيات الحُرة والمفتوحة المصدر

أدوات المستخدم

أدوات الموقع


pri:thwab

اختلافات

عرض الاختلافات بين النسخة المختارة و النسخة الحالية من الصفحة.

رابط إلى هذه المقارنة

جانبي المراجعة السابقةالمراجعة السابقة
المراجعة التالية
المراجعة السابقة
pri:thwab [2008/10/15 02:49] alsadipri:thwab [2015/04/23 03:21] (حالي) – تحرير خارجي 127.0.0.1
سطر 1: سطر 1:
 +====== ثواب ======
 +
 +هذه صفحة تحتوي على أفكار خام
 +
 +استيراد الكتب من الشاملة عبر mdbtools وذلك باستخدام
 +<code>
 +bash$ mdb-schema file.mdb
 +....
 +DROP TABLE b2023;
 +CREATE TABLE b2023
 + (
 + id Long Integer, 
 + nass Memo/Hyperlink (255), 
 + part Byte, 
 + page Long Integer, 
 + hno Long Integer
 +);
 +...
 +bash$ mdb-export -I file.mdb Table
 +INSERT INTO Main (BkId, Bk, Betaka, Inf, Auth, AuthInf, TafseerNam, IslamShort) VALUES (2023,"Blah ....
 +</code>
 +حيث يمكن تحويلها إلى sqlite أو أي قاعدة بيانات أخرى
 +
 +كان هناك مشكلة في التعامل مع العربية
 +http://sourceforge.net/tracker/index.php?func=detail&aid=741831&group_id=2294&atid=102294
 +
 +لكنها حلت بعد اعتماد unicode في mdbtools لكن هناك مشكلة أن النص الناتج كان مشوها وغير مقروء
 +<code>
 +correct: درء تناقض العقل والنقل
 +D8AF D8B1 D8A1 20 D8AA D8B9 D8A7 D8B1 D8B6 20 D8A7 D984 D8B9 D982 D984 20 D988 D8A7 D984 D986 D982 D984
 +deformed: unreadable utf-8 text
 +C38F C391 C381 20 C38A C39A C387 C391 C396 20 C387 C3A1 C39A C39E C3A1 20 C3A6 C387 C3A1 C3A4 C39E C3A1
 +
 +correct:
 +1101-1000-1010-1111 1101-1000-1011-0001 1101-1000-1010-0001 1101-1000-1010-1010 1101-1000-1011-1001 1101-1000-1010-0111
 +deformed
 +1100-0011-1000-1111 1100-0011-1001-0001 1100-0011-1000-0001 1100-0011-1000-1010 1100-0011-1001-1010 1100-0011-1000-0111
 +</code>
 +بعد قراءة الكود تبين أن JET3 المستخدمة في الشاملة لا تعتمد unicode ولا تحدد ال encoding داخل ملف mdb وتبين أن الحل بسيط جدا وهو تمرير الترميز على شكل env
 +
 +<code>
 +MDB_JET3_CHARSET=cp1256 mdb-export -I file.mdb Table
 +</code>
 +
 +===== طريقة تجربة البرنامج =====
 +<code>
 +yum install mdbtools
 +</code>
 +
 +===== طريقة استيراد ملف من الشاملة =====
 +<code bash>
 +mdb-schema x.mdb | perl -wpe 's%^DROP TABLE %DROP TABLE IF EXISTS %i;s%Memo/Hyperlink%TEXT%i;s%(Byte|(\w+ )?Integer)%INTEGER%i;s%\s*\(\d+\)\s*(,?[ \t]*)$%${1}%;s%(\s+TEXT)%${1} DEFAULT NULL%;s%(\s+INTEGER)%${1} DEFAULT 0%;' | sqlite3 x.db
 +
 +for i in $(mdb-tables x.mdb); do echo $i; (
 +  echo "BEGIN TRANSACTION;";
 +  MDB_JET3_CHARSET=cp1256 mdb-export -R ";\n" -I x.mdb $i;
 +  echo "END TRANSACTION;" ) | sqlite3 x.db; done
 +
 +</code>
 +
 +===== طريقة استيراد ملف من الشاملة إلى هيئة خاصة بنا =====
 +هيئة المكتبة الشاملة مشروحة في هذا الرابط
 +http://www.shamela.ws/old_site/help.php?do=database
 +فإذا أردنا تغيير تركيبة قاعدة البيانات نستطيع عمل:
 +<code>
 +rm x.db
 +(
 +# create temporary tables schema
 +mdb-schema x.mdb | perl -wpe 's%^DROP TABLE %DROP TABLE IF EXISTS tmp%i;s%^CREATE TABLE %CREATE TEMP TABLE tmp%i;s%Memo/Hyperlink%TEXT%i;s%(Byte|(\w+ )?Integer)%INTEGER%i;s%\s*\(\d+\)\s*(,?[ \t]*)$%${1}%;s%(\s+TEXT)%${1} DEFAULT NULL%;s%(\s+INTEGER)%${1} DEFAULT 0%;';
 +# import the data base as-is into the temporary tables
 +echo "BEGIN TRANSACTION;";
 +for i in $(mdb-tables x.mdb); do MDB_JET3_CHARSET=cp1256 mdb-export -R ";\n" -I x.mdb $i; done | perl -l -wpe 's/^INSERT INTO /INSERT INTO tmp/i'
 +# create out own tables format replace tmpb2023 with "tmpb%(id)d"
 +echo "DROP TABLE IF EXISTS bookcontent;"
 +echo "CREATE TABLE bookcontent (id integer PRIMARY KEY, textbody text);"
 +echo "DROP TABLE IF EXISTS toc;"
 +echo "CREATE TABLE toc (id integer PRIMARY KEY AUTOINCREMENT, prev_id integer, next_id integer, level integer, ref text, title text);"
 +
 +echo "INSERT INTO bookcontent (id, textbody) SELECT id,nass FROM tmpb2023 ORDER BY id;"
 +
 +echo "INSERT INTO toc (id, prev_id, next_id, level, ref, title) SELECT t.id, t.id-1,t.id+1, t.lvl, b.page, t.tit FROM tmpt2023 as t,tmpb2023 as b ORDER BY t.id, t.sub limit 1;"
 +echo "END TRANSACTION;" ) | sqlite3 x.db
 +</code>
 +لكن لسبب ما طريقة الاستيراد هذه أقل سرعة بكثير من سابقتها.
 +
 +===== التنفيذ =====
 +===== الطريقة الأولى =====
 +import a shamelah book into a single sqlite file in
 + /var/thwab or  /usr/share/thwab/ or  in home
 +
 +and then it touches the top level directory
 +so that when the app checks mtime stamp and it knows that a new files 
 +and update ~/.thwab/main.db which have ids titles and topics hierarchy
 +
 +system wide vs. user specific adding
 +and where caching should be ..etc.
 +
 +===== الطريقة الثانية =====
 +import all books into a single database (in shamelah they call it archive)
 +on /var/thwab/books.db and only those who have write access there can import new files
 +cache, indices ...etc all are global
 +
 +but in this case I think I should make thwab to open not yet imported books but this is not a feature
 +
 +I'm going the second way
 +
 +====== تحويله إلى exe ======
 +http://gladewin32.sourceforge.net/
 +
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki