首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

从.txt文件中提取数据:解决方案

2012-02-26 
从.txt文件中提取数据:我的.txt文件中有下面一大堆的数据如下:mydata.txt如下: *************************

从.txt文件中提取数据:
我的.txt文件中有下面一大堆的数据如下:


mydata.txt如下:
************************************************************************************************************************************  
 *RB-0060 BOC JIANG NING S TELLER DAILY REPORT DATE: 070901 PAGE: 1 *  
************************************************************************************************************************************  
  BANK:4447807 TELLER:00306  
  VCH SU TIME TX AC-NO DC CHR CUU TX-AMT PER DUE-DATE MEMO REF-NO NAME  
----------------------------------------------------------  
  000002 71 082555 0011 4447807010000000000071 C 00 01 250,000.00   
  TELLER TXN 1006 TOT: 000  
  BANK:4447807 TELLER:00309  
  VCH SU TIME TX AC-NO DC CHR CUU TX-AMT PER DUE-DATE MEMO REF-NO NAME  
----------------------------------------------------------  
  000001 71 082555 0011 4447807010000000000071 D 00 01 250,000.00   
  000003 00 083037 4447807010100084708900 D 00 01 3,590.00 11 3380678 刘敏     
  000004 00 083444 4450927010100004255800 C 00 01 500.00 #11 0539171 杨志坚    
  000005 71 083609 0087 4447807010000000000000 C 00 01 5.00   
  000006 71 083911 4447803011000900097031 D 00 01 118.33 24 20090519 73 0000006 凌晨宇    
  000007 71 083911 3590 4447803011000900097031 D 00 01 24 20090519 41 0000006 凌晨宇    


我想要把TX和TX-AMT下的两列数据提取出来,该用什么函数啊?

[解决办法]
是空格还是tab键 ?你首先要弄清楚。
然后就简单了啊,就是字符串分割问题么

[解决办法]
说起来很复杂,大体就是你一行一行读入数据,然后搜索空格,搜到第几个空格后面的数据是你需要的就记下来,然后再读入下一行
[解决办法]
比较的麻烦,很乱。中间隔的应该是空格,只能根据这个来判断。
[解决办法]
你可以参考下scanf的高级功能或者使用正则表达式,在网上找找,有很多资料
[解决办法]
用fscanf试试看
[解决办法]
中间的分隔符是空格吗?还是tab
如果是空格,那空格数一样吗?
如果一样的话,可以考虑导入到数据库
[解决办法]

C/C++ code
void CTest0Dlg::OnButton7() {    CFile file;    if(file.Open(_T("D:\\2.txt"),CFile::modeRead ))    {        int rt = 0;        TCHAR temp[50];        TCHAR usefull[20];        TCHAR h = '\0';        TCHAR l0 = '\0';        TCHAR l1 = '\0';        TCHAR l2 = '\0';        CString str, str1;        str = " TX   TX-AMT  \r\n----------\r\n";        str1.GetBufferSetLength(20);                do{            str1.GetBufferSetLength(4);                        rt = file.Read(&h,1);            if(h == '0' && l0 == ' ' && l1 == ' ' && l2 == '\n')            {                file.Read(temp,19);                file.Read(usefull, 4);                strncpy(str1.GetBuffer(4), usefull, 4);                str1.ReleaseBuffer();                str += str1;                str1.Empty();                                str1.GetBufferSetLength(14);                file.Read(temp,41);                file.Read(usefull, 14);                strncpy(str1.GetBuffer(14), usefull, 14);                str1.ReleaseBuffer();                str += str1;                str1.Empty();                                str += "\r\n";                            }                        l2=l1;            l1=l0;            l0=h;                    }while(rt);        GetDlgItem(IDC_EDIT1)->SetWindowText(str);    }} 


[解决办法]
file.Close();

[解决办法]
生成的txt文件越没规律,程序就越难编。
如果自己生成的,还是改一下格式好。
[解决办法]
11楼辛苦了
但我觉得向这种混乱的文件不适合采用数空格方式,谁知道这个文件是怎么生成的,或许是扫描的
lz有发言权

仔细观察文本格式不难发现有以下特点
1。不同子表均表示了某个bank下的操作,bank有代号,而且带有bank;的行中有用户需要的teller信息
2。需要的第一列在bank代号之前,且连续4个非空数字
3。需要的第二列数据是交易额,有小数点,且小数点具有唯一性,通过前后连续字符的判断,可以唯一识别出来

通过上述规则进行编程,应该不会有什么问题
分析完成,下面谁来编程吧
[解决办法]
只要文本列是对齐的就好办

热点排行