从.txt文件中提取数据:

lord_is_layuping 2007-10-18 02:56:36
我的.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下的两列数据提取出来,该用什么函数啊?
...全文
367 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
凤矶 2007-10-19
  • 打赏
  • 举报
回复
只要文本列是对齐的就好办
oo_v_oo 2007-10-18
  • 打赏
  • 举报
回复
11楼辛苦了
但我觉得向这种混乱的文件不适合采用数空格方式,谁知道这个文件是怎么生成的,或许是扫描的
lz有发言权

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

通过上述规则进行编程,应该不会有什么问题
分析完成,下面谁来编程吧
fronz 2007-10-18
  • 打赏
  • 举报
回复
生成的txt文件越没规律,程序就越难编。
如果自己生成的,还是改一下格式好。
凤矶 2007-10-18
  • 打赏
  • 举报
回复
file.Close();
凤矶 2007-10-18
  • 打赏
  • 举报
回复


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);

}
}

试过了,没问题
shakaqrj 2007-10-18
  • 打赏
  • 举报
回复
中间的分隔符是空格吗?还是tab
如果是空格,那空格数一样吗?
如果一样的话,可以考虑导入到数据库
lord_is_layuping 2007-10-18
  • 打赏
  • 举报
回复
TX-AMT
250,000.00
3,590.00
500.00
。。。
上面这一列好麻烦啊,还是没有思路。高手们啊?
yishow 2007-10-18
  • 打赏
  • 举报
回复
用fscanf试试看
wsfsaint 2007-10-18
  • 打赏
  • 举报
回复
你可以参考下scanf的高级功能或者使用正则表达式,在网上找找,有很多资料
erdgzw 2007-10-18
  • 打赏
  • 举报
回复
比较的麻烦,很乱。中间隔的应该是空格,只能根据这个来判断。
guo_wei 2007-10-18
  • 打赏
  • 举报
回复
说起来很复杂,大体就是你一行一行读入数据,然后搜索空格,搜到第几个空格后面的数据是你需要的就记下来,然后再读入下一行
jxbicestare 2007-10-18
  • 打赏
  • 举报
回复
是空格还是tab键 ?你首先要弄清楚。
然后就简单了啊,就是字符串分割问题么
lord_is_layuping 2007-10-18
  • 打赏
  • 举报
回复
帮帮我啊,踏雪无痕,里面有好多的空格啊,。。哪里有这方面的例子介绍我看看啊。
lord_is_layuping 2007-10-18
  • 打赏
  • 举报
回复
也就是我要打印出如下的数据:
mydata.txt如下:
TELLER:00306
TX TX-AMT
TELLER:00309
TX TX-AMT
0011 250,000.00
3,590.00
500.00
0087 5.00
118.33
3590
。。。 。。。等等等。。。 。。。
guo_wei 2007-10-18
  • 打赏
  • 举报
回复
自己解析吧

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧