小弟在写一个从txt文件中读取数据,然后更新数据库的程序。读取函数如下:
void CTxt2oraDlg::OnReadfile() 
{  
char buf[128];
char ntemp[128];
int nBegin = 0;//nBegin nEnd一开始指向buf头
int nEnd = 0;
while(TxtFile.ReadString(buf,128))
{
for(; nEnd<sizeof(buf);nEnd++)
{
if (nEnd ==' ')
{
           strncpy(ntemp,buf,sizeof(nEnd - nBegin));
   //把空格符号前的那段数据放到一个数组里面
   nEnd = nEnd + 1;//nEnd指向空格下一个字符
   break;
   //在这里进行更新数据库的操作。。
}
if (nEnd == '\n')//如果是一行结束,转到下一行
{
break;
}
}txtfile.Addstring(ntemp);//把内容在listbox显示
}
}
但是为什么输出的是乱码怎么才可以实现我用这个函数的时候全部更新数据库中的东西。就是说比如天txt文件中数据如下:
age name id
12 aaa 121243
12 2sdf qwr
我怎么才可以读一个数据,然后更新,再读一个,救命阿,

解决方案 »

  1.   

    FILE *fp = fopen( "a.txt" , "r+" );
    if( fp != NULL )
    {
    char szAge[10] , szName[20] , szid[10];
    while( !feof( fp ) )
    {
    fscanf( fp , "%s %s %s\n" , szAge , szName , szid );
    TRACE( "szAge = %s , szName = %s , szId= %s\n" , szAge , szName , szid );
    // 在这里更新数据库并在ListBox中显示
    }
    fclose( fp );
    }
      

  2.   

    多谢楼上的指教,您是用流来读写吧。如果我用楼上的做法,我想定义一个按钮,自定义打开文件,而不用fopen("a.txt","r+"); 如何做呢?
      

  3.   

    去掉你程序中的sizeof,计算长度就要两者之差不就可以了吗?为什么还要用sizeof.
      

  4.   

    不用sizeof是对的,但我定义长度是int 而在if 中是nEnd= ' ';,我不知道这里怎么转换,,多谢,,
      

  5.   

    To gunyeah(笑笑军):"我想定义一个按钮,自定义打开文件"那么就定义一个成员变量(或者全局变量)FILE *m_fp;
    在按钮Click的时候调用m_fp = fopen( "a.txt" , "r+" );不就行了吗?
      

  6.   

    请问如果我那份文件是
    age,name,id
    12,aaa,121243
    12,2sdf,qwr
    用“,”号分隔开的呢?
    fscanf( fp , "%s %s %s\n" , szAge , szName , szid );
    这句应该如何阿?
      

  7.   

    if (nEnd ==' ')这样写可以吗?我记得好像不行吧,空格的ASCII为32,
    可以这样写
    if nEnd==32
    不过你的文本文件中这里不一定就是32号的空格,也许是别的不能显示的ASCII字符。