Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Cách tạo file lưu dữ liệu cho Từ điển?

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    3

    Unhappy Cách tạo file lưu dữ liệu cho Từ điển?

    Trên dict.org có sẵn cơ sở dữ liệu và cho download free, nhưng em vẫn muốn tạo một database cho riêng mình để tiện sử dụng. Mong các anh hãy giúp em.

    Giả sử bây giờ em muốn tạo một cơ sở dữ liệu gồm các từ riêng về ngành CNTT chẳng hạn. Mục đích của em là sẽ viết chương trình từ điển bằng C/C++, và có thể trên Turbo C++ IDE (vì nhà trường yêu cầu).
    Về cách tạo cơ sở dữ liệu cho từ điển, em có tham khảo tài liệu trên mạng, có nói nên tạo 2 files, 1 file chứa từ và 1 file chứa nghĩa của từ. Nhưng em vẫn không hình dung ra nên làm thế nào để có thể truy cập vào một file và hiện ra nghĩa của từ đó qua file kia.

    Xin các anh hãy hướng dẫn chi tiết dùm em, cách tạo thế nào, mã hóa ra sao, và có thể truy cập vào nội dung của 2 files đó bằng C/C++. Thanks mọi người.

    Bạn lưu ý: không được post các câu hỏi vào Box hướng dẫn nhé !!!
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Đã được chỉnh sửa lần cuối bởi zkday2686 : 17-10-2008 lúc 02:48 AM.

  2. #2
    Ngày gia nhập
    09 2007
    Bài viết
    724

    Vẫn chưa hiểu ý của bạn là như thế nào??? (dùng cơ sở dữ liệu là dùng các hệ quản trị cơ sở dữ liệu để xài hay là dùng cơ sở dữ liệu là file.)

    Nếu là thiết kế một cơ sở dữ liệu(dùng Hệ quản trị cơ sở dữ liệu) thì chỉ cần dùng 1 Table với cấu trúc như sau:

    SQL Code:
    1. CREATE TABLE TuDien(
    2.  Tu nvarchar(100) PRIMARY KEY,
    3.  Nghia nvarchar(100)
    4. )

    khi mỗi lần tìm kiếm một nghĩa nào đó thì bạn dùng câu lệnh select sau:

    SQL Code:
    1. SELECT Tu,Nghia FROM TuDien WHERE Tu = từ_cần_tra_cứu

    Nếu bạn muốn dùng file mình tạo để lưu trử thì bạn có thể sử dụng cấu trúc dictionary bạn có thể google nó hoặc tham khảo nó tại: http://www.nist.gov/dads/HTML/dictionary.html. Còn rất nhiều cấu trúc dữ liệu nữa cho bạn để dùng nó ví như Index.

  3. #3
    Ngày gia nhập
    10 2008
    Bài viết
    3

    Vẫn chưa hiểu ý của bạn là như thế nào??? (dùng cơ sở dữ liệu là dùng các hệ quản trị cơ sở dữ liệu để xài hay là dùng cơ sở dữ liệu là file.)
    Em muốn tạo một database bằng file anh ạ, để lưu trữ các từ và nghĩa của từ và có thể truy cập được bằng C và C++. Mong mọi người giúp em.

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Nếu bạn dùng file thì có 2 cách :
    - 1 file : cấu trúc lưu trữ có dạng <từ> <nghĩa của từ>
    - 2 file :
    + file thứ 1 : <từ> <cursor của file thứ 2>
    + file thứ 2 : <nghĩa của từ>
    Để đọc được nghĩa trong file 2, đầu tiên bạn đọc file 1, tìm từ và tìm ra cursor tương ứng. Sau đó mở file 2, dời cursor của file 2 đến cursor vừa tìm được và đọc.
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Nếu bạn dùng file thì có 2 cách :
    - 1 file : cấu trúc lưu trữ có dạng <từ> <nghĩa của từ>
    - 2 file :
    + file thứ 1 : <từ> <cursor của file thứ 2>
    + file thứ 2 : <nghĩa của từ>
    Để đọc được nghĩa trong file 2, đầu tiên bạn đọc file 1, tìm từ và tìm ra cursor tương ứng. Sau đó mở file 2, dời cursor của file 2 đến cursor vừa tìm được và đọc.
    thích đẳng cấp nữa thì tạo file binary nhảy cho nhanh

    * Nếu thích cấu trúc thì 1 hoặc 2 file cũng được:
    C++ Code:
    1. #define MAX_WORDS 1024
    2.  
    3. typedef struct _Word {
    4.    char* title;
    5.    char* meanings;
    6. } WORD;
    7.  
    8. WORD list[MAX_WORDS];
    9. // hoặc con trỏ cũng OK
    10. WORD** list;

    * Khá hơn cấu trúc thì viết OOP cho phê
    Đã được chỉnh sửa lần cuối bởi Xcross87 : 17-10-2008 lúc 12:17 AM.
    None!

  6. #6
    Ngày gia nhập
    04 2009
    Bài viết
    11

    Mặc định Cách tạo file lưu dữ liệu cho Từ điển?

    Trích dẫn Nguyên bản được gửi bởi meoconlongvang Xem bài viết
    Nếu bạn dùng file thì có 2 cách :
    - 1 file : cấu trúc lưu trữ có dạng <từ> <nghĩa của từ>
    - 2 file :
    + file thứ 1 : <từ> <cursor của file thứ 2>
    + file thứ 2 : <nghĩa của từ>
    Để đọc được nghĩa trong file 2, đầu tiên bạn đọc file 1, tìm từ và tìm ra cursor tương ứng. Sau đó mở file 2, dời cursor của file 2 đến cursor vừa tìm được và đọc.
    pro ơi, cho em hỏi. nếu làm như thế này thì ko cần dùng đến database tạo bằng sql nữa hả?

  7. #7
    Ngày gia nhập
    03 2010
    Nơi ở
    Nơi nào đó trong vũ trụ
    Bài viết
    550

    Như thế thì mình tự tạo ra bộ cơ sở dữ liệu cho mình, đồng thời tự quản lý truy cập nó rồi thì cần gì đến SQL. Mà SQL hình như không tiện lắm trong việc này thì phải, nó cần cài đặt chương trình để quản lý cơ sở dữ liệu mà.
    Gió thu lạnh lẽo hắt hiu lòng!

  8. #8
    Ngày gia nhập
    04 2009
    Bài viết
    11

    Trích dẫn Nguyên bản được gửi bởi birthis Xem bài viết
    Như thế thì mình tự tạo ra bộ cơ sở dữ liệu cho mình, đồng thời tự quản lý truy cập nó rồi thì cần gì đến SQL. Mà SQL hình như không tiện lắm trong việc này thì phải, nó cần cài đặt chương trình để quản lý cơ sở dữ liệu mà.
    thế này thì mình chỉ việc thao tác dữ liệu hoàn toàn với file thôi nhỉ? nhưng cho mình hỏi điều này với, nếu file với dung lượng lớn như trong từ điển thế kia thì có vấn đề j ko bạn? mình mới làm quen với kiểu dl này nên gà lắm

  9. #9
    Ngày gia nhập
    03 2010
    Nơi ở
    Nơi nào đó trong vũ trụ
    Bài viết
    550

    Theo mình nghĩ nếu làm như cách của anh meoconlongvang:
    + file thứ 1 : <từ> <cursor của file thứ 2>
    + file thứ 2 : <nghĩa của từ>
    Thì file lớn hay nhỏ cũng không vấn đề, vì file 1 lưu trữ con trỏ rồi. Khi cần truy xuất thì chỉ nhảy đến vị trí đã được trỏ thôi. Không cần phải đọc file tuần tự file 2 để tìm kiếm. File 1 tìm kiếm nhị phân cũng được nhỉ.
    Gió thu lạnh lẽo hắt hiu lòng!

  10. #10
    Ngày gia nhập
    10 2009
    Nơi ở
    Milky Way professional final
    Bài viết
    357

    Nếu bạn thích tạo file từ điển cấu trúc giống ví dụ như sau thì có thể tham khảo đoạn code tiếp theo. Mình viết nó lâu lắm rùi, không hi vọng giúp gì thêm.Trong bài có sử dụng 1 phương pháp băm và băm chỉ 1 cấp duy nhất, bạn có thể băm 2,3 cấp để tìm từ mau hơn, ví dụ hello,hi hai chữ này nếu băm 1 cấp thì bỏ chung vào chữ h, nhưng nếu 2 cấp thì nó sẽ chia ra thêm chữ e, i nữa.Chắc chắn là kĩ thuật băm 2,3 cấp thì khó hơn.

    Text Code:
    1. one    mot,so dem
    2. two    hai,so dem
    3. three    ba,,so dem
    4. four    bon,so dem
    5. five    nam,so dem
    6. six    sau,so dem
    7. seven    bay,so dem
    8. eight    tam,so dem
    9. nine    chin,so dem
    10. ten    muoi,so dem

    Tham khảo thử đoạn code này xem:

    C++ Code:
    1. #include<iostream>
    2. #include<stdio.h>
    3. #include<conio.h>
    4. #include<string.h>
    5. #include<ctype.h>
    6. #include<fstream>
    7. using namespace std;
    8. #define M 26
    9. typedef struct tagnode
    10. {
    11.     char word[20];
    12.     char mean[100];
    13.     struct tagnode*pNext;
    14. }NODE;
    15. typedef struct tagList
    16. {
    17.     NODE* pHead;
    18.     NODE* pTail;
    19. }LIST;
    20. NODE *new_ele;
    21. //Khoi tao danh sach
    22. void initList(LIST &l)
    23. {
    24.     l.pHead= l.pTail = NULL;
    25. }
    26. //Tao ra mot phan tu ,thong tin chua trong x
    27. NODE* GetNode(char word[],char mean[])
    28. {
    29.     NODE *p;
    30.     p = new NODE;
    31.     if(p==NULL)
    32.     {
    33.         cout<<"Khong du bo nho";
    34.         return NULL;
    35.     }
    36.     strcpy(p->word,word);
    37.     strcpy(p->mean,mean);
    38.     p->pNext = NULL;
    39.     return p;
    40. }
    41. //Chen mot phan tu vao danh sach
    42. //chen vao dau danh sach
    43. void AddFirst(LIST &l,NODE* new_ele)
    44. {
    45.     if(l.pHead==NULL)
    46.     {
    47.         l.pHead = new_ele;
    48.         l.pTail = l.pHead;
    49.     }
    50.     else
    51.     {
    52.         new_ele->pNext = l.pHead;
    53.         l.pHead = new_ele;
    54.     }
    55. }
    56. NODE* InsertHead(LIST &l,char word[],char mean[])
    57. {
    58.     NODE* new_ele  = GetNode(word,mean);
    59.     if(new_ele == NULL)
    60.         return NULL;
    61.     if(l.pHead == NULL)
    62.     {
    63.         l.pHead = new_ele;
    64.         l.pTail = l.pHead;
    65.     }
    66.     else
    67.     {
    68.         new_ele->pNext = l.pHead;
    69.         l.pHead = new_ele;
    70.     }
    71.     return new_ele;
    72. }
    73. //chen vao cuoi danh sach
    74. void AddTail(LIST &l,NODE *new_ele)
    75. {
    76.     if(l.pHead == NULL)
    77.     {
    78.         l.pHead = new_ele;
    79.         l.pTail = l.pHead;
    80.     }
    81.     else
    82.     {
    83.         l.pTail->pNext = new_ele;
    84.         l.pTail = new_ele;
    85.     }
    86. }
    87. NODE* InsertTail(LIST &l,char word[],char mean[])
    88. {
    89.     NODE* new_ele = GetNode(word,mean);
    90.     if(new_ele == NULL)
    91.         return NULL;
    92.     if(l.pHead == NULL)
    93.     {
    94.         l.pHead = new_ele;
    95.         l.pTail = l.pHead;
    96.     }
    97.     else
    98.     {
    99.         l.pTail->pNext = new_ele;
    100.         l.pTail = new_ele;
    101.     }
    102.     return new_ele;
    103. }
    104. //Chen vao danh sach sau phan tu q
    105. void AddAfter(LIST &l,NODE *q,NODE* new_ele)
    106. {
    107.     if(q!=NULL)
    108.     {
    109.         new_ele->pNext = q->pNext;
    110.         q->pNext = new_ele;
    111.         if(q==l.pTail)
    112.             l.pTail = new_ele;
    113.     }
    114.     else
    115.         AddFirst(l,new_ele);
    116. }
    117. NODE* InsertAfter(LIST &l,NODE *q,char word[],char mean[])
    118. {
    119.     NODE* new_ele = GetNode(word,mean);
    120.     if(new_ele ==NULL)
    121.         return NULL;
    122.     if(q!=NULL)
    123.     {
    124.         new_ele->pNext = q->pNext;
    125.         q->pNext = new_ele;
    126.         if(q==l.pTail)
    127.             l.pTail = new_ele;
    128.     }
    129.     else
    130.         AddFirst(l,new_ele);
    131. }
    132. //Tim mot phan tu trong danh sach
    133. NODE *Search(LIST l,char word[])
    134. {
    135.     NODE *p;
    136.     p = l.pHead;
    137.     while((p!=NULL) && (strcmp(p->word,word)!=0))
    138.         p =p->pNext;
    139.     return p;
    140. }
    141. //Huy mot phan tu khoi danh sach
    142. int RemoveNode(LIST &l,char word[])
    143. {
    144.     NODE *p = l.pHead;
    145.     NODE *q = NULL;
    146.     while(p!=NULL)
    147.     {
    148.         if(strcmp(p->word,word)==0)
    149.             break;
    150.         q = p;
    151.         p = p->pNext;
    152.     }
    153.     if(p==NULL)
    154.         return 0;
    155.     if(q!=NULL)
    156.     {
    157.         if(p == l.pTail)
    158.             l.pTail = q;
    159.         q->pNext = p->pNext;
    160.         delete p;
    161.     }
    162.     else
    163.     {
    164.         l.pHead = p->pNext;
    165.         if(l.pTail==NULL)
    166.             l.pTail = NULL;
    167.     }
    168.     return 1;
    169. }
    170. //Duyet danh sach
    171. void ProcessList(LIST l)
    172. {
    173.     ofstream fg;
    174.     fg.open("output.txt",ios::app);
    175.     NODE *p;
    176.     int i = -1;
    177.     p = l.pHead;
    178.     while(p!= NULL)
    179.     {
    180.         cout <<"\""<<p->word<<"\"";fg <<"\""<< p->word <<"\"";
    181.         cout << " nghia cua tu : ";fg << " nghia cua tu :";
    182.         cout << p->mean;fg << p->mean;
    183.         cout << endl;fg << endl;        
    184.         p = p->pNext;
    185.     }
    186.     fg.close();
    187. }
    188. ///////////////////////////////
    189. //DA XAY DUNG XONG MOT DANH SACH LIEN KET
    190. //Bang bam
    191. LIST bucket[M];
    192. //Ham bam
    193. int hashfunc(char word[])
    194. {
    195.     char ch = toupper(word[0]);
    196.     return ((ch - 65)%M);
    197. }
    198. //Khoi tao thung bucket
    199. void initbucket()
    200. {
    201.     for(int i=0;i<M;i++)
    202.         initList(bucket[i]);
    203. }
    204. //Them mot nut vao thung bucket
    205. void Insert(NODE *p)
    206. {
    207.     int i = hashfunc(p->word);
    208.     AddTail(bucket[i],p);
    209. }
    210. //Tim kiem mot tu tra ve dia chi tu do
    211. NODE* Find(char word[])
    212. {
    213.     int i=hashfunc(word);
    214.     return (Search(bucket[i],word));
    215. }
    216. //Huy mot tu khoi tu dien,tra ve 1 neu thanh cong,0 neu khong co tu nay
    217. int RemoveWord()
    218. {
    219.     char word[20];
    220.     fflush(stdin);
    221.     cout <<"Nhap tu can huy: ";gets(word);fflush(stdin);cout <<endl;
    222.     int i = hashfunc(word);
    223.     return RemoveNode(bucket[i],word);
    224. }
    225. //Ham tao tu dien
    226. void MakeDictionary()
    227. {
    228.     NODE*p;
    229.     char word[20];
    230.     char mean[100];
    231.     char c;
    232.     do
    233.     {
    234.         fflush(stdin);
    235.         cout << "Nhap tu can tao:";gets(word);cout<<endl;
    236.         if(strcmp(word,"")==0)
    237.             break;
    238.         fflush(stdin);
    239.         cout << "Nhap cac nghia cua tu:";gets(mean);cout <<endl;
    240.         p = GetNode(word,mean);
    241.         Insert(p);
    242.         fflush(stdin);
    243.         cout <<"Tiep tuc chu (y/..):";c=getche();cout<<endl;
    244.         if(c!='y' && c!='Y')
    245.             break;
    246.     }while(true);
    247. }
    248. //Ham tim mot tu trong tu dien
    249. void FindWord()
    250. {
    251.     NODE* p;
    252.     char word[20];
    253.     fflush(stdin);
    254.     cout << "Nhap tu can tim :";gets(word);
    255.     p = Find(word);
    256.     if(p == NULL)
    257.         cout <<"Khong co tu nay trong tu dien"<<endl;
    258.     else
    259.         cout <<"Nghia cua tu :"<<p->mean<<endl;
    260.     return;
    261. }
    262. //The hien toan bo tu dien
    263. void DislayDictionary()
    264. {
    265.     for(int i=0;i<M;i++)
    266.         ProcessList(bucket[i]);
    267. }
    268. //Ham nay lay du lieu tu file
    269. bool ischar(char kitu)//kiem tra la chu cai
    270. {
    271.     int temp;
    272.     temp = int(kitu);
    273.     if((temp>=65 && temp<=90)||(temp >=97 && temp<=122))
    274.         return true;
    275.     return false;
    276. }
    277. void MakeFromFile()
    278. {
    279.     NODE*p;
    280.     char c;
    281.     int dem =0;
    282.     int i=0;int j=0;
    283.     char word[20];
    284.     char mean[100];
    285.     FILE*f;
    286.     f = fopen("data.txt","rt");
    287.     if(f==NULL)
    288.     {
    289.         printf("Khong mo duoc file");
    290.         exit(0);
    291.     }
    292.     while(!(feof(f)))
    293.     {
    294.             c = getc(f);
    295.             if(dem == 0)
    296.             {
    297.                 if(!(ischar(c)) && c!='\n')
    298.                 {
    299.                     word[i]='\0';
    300.                     dem=1;
    301.                 }
    302.                 else
    303.                     word[i++] = c;
    304.             }
    305.             else
    306.             {
    307.                 if(c!='\n')
    308.                 {
    309.                     mean[j++]=c;
    310.                 }
    311.                 else
    312.                 {
    313.                     mean[j] = '\0';
    314.                     if(strlen(word)!=0 || strlen(mean)!=0)
    315.                     {
    316.                         p = GetNode(word,mean);
    317.                         Insert(p);
    318.                     }
    319.                         dem = 0;i = 0;j=0;
    320.                     //}
    321.                 }
    322.             }
    323.     }
    324. }

    Hàm main:
    C++ Code:
    1. //Chuong trinh tu dien don gian theo phuong phap ket noi truc tiep
    2. #include"Hash_table.h"
    3. void main()
    4. {
    5.     MakeFromFile();
    6.     char chon;
    7.     do
    8.     {
    9.         cout<<"CHUONG TRINH TU DIEN DON GIAN"<<endl;
    10.         cout<<"Cac chuc nang:"<<endl;
    11.         cout<<"0:Quit"<<endl;
    12.         cout<<"1:xay dung tu dien"<<endl;
    13.         cout<<"2:Tra tu"<<endl;
    14.         cout<<"3:Xem toan bo tu dien"<<endl;
    15.         cout<<"4:Huy mot tu khoi tu dien"<<endl;
    16.         chon = getche();
    17.         cout << endl;
    18.         switch(chon)
    19.         {
    20.         case '1':MakeDictionary();break;
    21.         case '2':FindWord();break;
    22.         case '3':DislayDictionary();break;
    23.         case '4':RemoveWord();break;
    24.         }
    25.     }while(chon!='0');
    26. }

    Hi,Nói chung tạo file tùy ý thôi, vì nếu nói đúng thì dữ liệu của mình phải mã hóa nữa mà đây chỉ là làm cơ bản cho hiểu, mình tham khảo sách C và viết bằng C++(.NET 2005) nhưng mà chẳng đúng phong cách C++, không có hướng đối tượng gì ráo, nói chung mình làm đa số vậy, là C++ lẽ ra nên dùng hướng đối tượng hay hơn nhưg mình thì chơi phong cách C ráo, chỉ có mấy cái cout, cin, new ,..linh tinh của C++.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Lãng tử vô danh

Các đề tài tương tự

  1. Cách add file thư viện dll vào file exe để tạo một file chạy duy nhất C#
    Gửi bởi nthung2112 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 20
    Bài viết cuối: 01-09-2012, 10:01 AM
  2. File backup .bak có dung lương lớn hơn file .mdb và file log
    Gửi bởi MYNAM trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 27-07-2012, 12:59 PM
  3. Giới thiệu cách chuyển File Ảnh thành file Video trong download proshow gold
    Gửi bởi thuhu0900x trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 03-07-2012, 03:54 AM
  4. Đọc dữ liệu file midi dạng số HEX và lấy lời nhạc trong file ra file text
    Gửi bởi kimngockhtn_2007 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 29-06-2011, 04:40 PM
  5. Trả lời: 17
    Bài viết cuối: 23-05-2011, 11:47 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn