我的数据库sss中有上千条记录,其中有几个字段是text类型,需要存放的文本内容很大,所以我在数据库字段中改存文本文件的完整路径。
   请问高手:如何根据数据库表中文件的路径,按行读取文本文件的内容(我想从第二行开始读,文本中是以回车换行的)到数组,并能显示出来。
   我个人觉得可以用数据流来实现,但是具体怎么做不是很清楚。要求用vc实现,有参考代码的更好,回答好的我会追加得分的哈
   谢谢!

解决方案 »

  1.   

    我文件格式是
    >this is|45613-567789|mmmm
    AAAAFFFGGGTTTASSSDFFG
    ASDFFFFGGGHJHJKKLKKLL
    SRGFGHHJKJKLLJLJLJLLJ
    JHLLLL
    想从第二行开始一行一行地读人数据。有比较完整的vc代码吗?
      

  2.   

    用MFC的CStdioFile类   
    CStdioFile file;
    file.Open("test.txt",CFile::modeRead | CFile::modeWrite);
    CString strTemp;
    file.ReadString(strTemp);
      

  3.   

    这个问题就是怎么读取文本文件的问题;
    跟 ADO 一点关系没有,不要混起来。MFC 中用 CStdioFile 类处理即可。
      

  4.   

    是的
    是不是把这个路径去出来赋给一个变量,然后把它作为file.Open()的第一个参数?
      在高手面前我是笨哈,最近脑壳有点短路了。
      如果高手还能帮我提供点思路更好,就是读取之后用那种来存更适合字符串的查找。
      万分感谢
      

  5.   

    嗯,这个其实很简单,把路径存放在数据库表中的字符串型字段中即可..关于VC对数据库的操作,你可以参考如下文章:
    http://www.vckbase.com/document/viewdoc/?id=1215
    http://www.vckbase.com/document/viewdoc/?id=610
      

  6.   

    我觉得楼主可以这样实现:
    1. 首先可以把文件的内容存储到数据库中,而不是单纯的一个文件名。这样你从数据库中读取出来的数据可以直接保存成文件。
    这个可以参考:http://blog.csdn.net/primer_programer/archive/2008/07/01/2602305.aspx
    2. 第一步结束后,就是怎么读文件的问题了。使用CStdioFile 访问怎样访问数据库可以参考:
    http://blog.csdn.net/primer_programer/archive/2008/05/12/2436388.aspx
      

  7.   

    首先非常感谢primer_programer给的意见
    题目要求:将基因序列存入数据库,并查找序列中的串联重复序列(应涉及到字符串匹配算法,想用后缀数组实现).
    我建立的数据库sss中,有id(序列编号),name(基因名称),data(基因序列,text类型),repeatdata(重复基因序列,text类型),由于后两个字段中存储的字符有上万个,且我下载的序列文件格式是第一行是说明字段,从第二行起才是真正要用的序列字符串,格式如下:
    >this is ¦45613-567789 ¦mmmm 
    AAAAFFFGGGTTTASSSDFFG 
    ASDFFFFGGGHJHJKKLKKLL 
    SRGFGHHJKJKLLJLJLJLLJ 
    JHLLLL    (每行字段以回车换行)
    原来我是想把序列字符直接存在数据库data(text类型)中,但是数据量太大,用execl无法导入,于是先导入了前两个字段,不知道如何把这些序列根据表中已经有的id导入data字段.后来想到把整个文件存入(文件近两千个),但似乎更新的时候不行.于是又想到数据库中只存文件的全路径,然后在进行字符串查找的时候再根据此路径将文件中的基因序列(说明字段除外)读入到数组中,进行串联重复字段的查找.
     自己基础不太好,现在身边又没什么参考资料,所以才向各位高手求教!
      

  8.   

    tabby谢谢你的宝贵意见
       我用vc创建了一个mfc应用,建立了一个单文档,现在不知道在什么地方实现mfc的CStdioFile类.在使用这个类把文件中的序列字符(说明字段除外)按行逐字符读入到数组中时,怎么根据序列长度分配数组大小呢?是否还有更好的实现方法?
       现在我想解决的问题是:
       1、数据库中到底存序列文件,序列字符串本身还是路径更好?如何根据表中已经有的序列编号存入data字段?
       2、如何把序列字符串读入数组,以便进行后面的查找?
       注:我才刚开始学vc,对mfc的应用也不熟悉,请高手指教,提供一些参考代码和文章。
       万分感谢!
       
      

  9.   

    1.读取文件中的字符串时,CStdioFile是按一行(也就是按回车符)读取一串字符串..然后保存在CString变量中,不需要你指定长度..
    2.如文件比较大,或者数量比较多,那么用存路径的方法比较好,也很方便..我不知道你会不会用ADO进行数据库编程,如果你会的话,这实际上是非常简单的操作!
    比如你可以在数据库表中定义filename字段,其中存放的字符串为文件路径: d:\test\test.txt
    然后在VC中用ADO连接数据库,并打开该表,取得filename字段的值:
    _variant_t var = m_pRs->GetCollect("filename");
    if(var.vt != VT_NULL)
    CString strFilename = (LPCSTR)_bstr_t(var);这时候strFilename中存放的就是"d:\test\test.txt"字符串,接下来用CStdioFile读取就可以了:
    CStdioFile file; 
    file.Open(strFilename ,CFile::modeRead ¦ CFile::modeWrite); 
    CString strTemp; 
    file.ReadString(strTemp); //每调用一次这条语句,读取文件的一行..
      

  10.   

    tabby非常感谢你的回复!
    你的意思我大概能理解,自己vc编程就是比较差,现在才开始学。
    CStdioFile是从第一行开始读的,我要从第二行读,该怎么办?
    那个CString变量我可以设置为数组吗?我进行字符串查找的时候想用数组,数组一般是要预先分配大小的啊?我怎么把CString变量里的字符串存到数组呢?
    我建立了一个工程,可是不知道在什么地方实现CStdioFile类,能介绍一下用mfc的操作步骤吗?
      请赐教!
      

  11.   

    获取文件路径时还需要where id='xxx'这个条件,应该要用到sql查询语句吧
      

  12.   

    file.ReadString(strTemp); 
    每调用一次上面的语句,就会读取一行字符串,你自己设个变量对调用次数计数就能针对具体哪行进行读取了..
    如:
    CString strTemp;
    int i = 0;   
    while(file.ReadString(strTemp))
    {
        i++;
        CString output;
        output.Format("第%d行字符串为:",i,strTemp);
        AfxMessageBox(output);
    }    CString你也可以当做字符数组进行处理的..可以根据下标访问其中的任意字符CStdioFile不需要你实现,你只要把下面的代码写在你的程序中就直接在用了:
    CStdioFile file; 
    file.Open(strFilename ,CFile::modeRead ¦ CFile::modeWrite); 
    CString strTemp; 
    file.ReadString(strTemp); //每调用一次这条语句,读取文件的一行..
      

  13.   

    对,在打开ADO记录集的时候在查询语句中指定查询条件~
      

  14.   

    tabby已经将文本文件的内容按行读出来了,你将数据库中的保存的文本文件路径赋给strTemp就可以了
    接下来就是ADO数据库操作:
    打开数据库-》查询表-》GetFieldValue得到文件路径就可以了
      

  15.   


    能否举个将CString当作数组用的例子?我把文件从第二行开始到文件末的所有序列存入数据,并显示出来该怎么做啊?我看其他资料在创建数组时就分配了大小,我怎么根据文件中字符串的个数给数据分配空间呢?
       我在程序中的任何一个成员函数中都可以直接用CStdioFile file,不需要类声明或引用什么特别的头文件吗?
      

  16.   

    你为什么有字符串类不用呢? 分配空间多麻烦~ CString按字符数组单独访问每个字符的例子如下:
    CString strTemp="tyz";
    for(int j=0;j<strTemp.GetLength();j++)
    {
    CString temp;
    temp.Format("%c",strTemp.GetAt(j));
    AfxMessageBox(temp);
    }CStdioFile 可直接使用,什么都不需要包含..
      

  17.   

    maomaoxiong:
       tabby把文件路径赋给的是变量StrFilename吧?还是我理解错了,我怎么在自己的下载的msnd上查不到file.ReadString(strTemp)函数的意思呢