救命啊。。。关于MFC文件查找,匹配,输出问题。。。

ec26ca
06696c
707be8
d0fa1d
94103e
96103e
16e543
d4ee07
c01885
40c62a

这样一个A.txt文本;

ec26aaca 01
066aa96c rf
961aa03e 06
16e54aa3 07
d4eae07b 08
c018a85s 09
40c62a 10
ec2aa6ca 11
0857aa00 12
ec6aac9f 13
8c2aa10a 14
9c28ef 15
c88550 16
cc2aa48f 17

这样一个B.txt文本,

怎么在MFC中编程实现在B文件中找到A文件中的内容,然后输出到EDIT中,

有木有大神来点详解,或者模板什么的,看了好几天,实在是不知道该怎么做了。。。
CString buf1[256];
CStdioFile file;
CString str1;
file.Open("F:\a.txt",CFile::modeRead);
for(int i=0;file.ReadString(str1);i++)
{
buf1[i]==str1.Left(str1.Find('\r\n'));

    CString buf2[256];
    CStdioFile read;
    CString str2,strTemp,str3;
    read.Open("F:\\B.txt",CFile::modeRead);
    for(int j=0;read.ReadString(str2);j++)
    {
        buf2[j]==str2.Left(str2.Find(' '));
        if(buf2[j]==buf1[i])
        {
            str3.Format("%x\n",buf2[j]);
            strTemp+=str3;
            strTemp+="\r\n";
        }
        SetDlgItemText(IDC_EDIT1,strTemp);
    }
} 
自己写的程序,帮忙看下错哪里了?

4个回答

步骤1:读取文本B的所有字符,存储到数组Source[]中,作为查找的源;步骤2:按行读取文本A的一行内容,存储为数组Target[];步骤3:在Source[]数组中查找Target[];步骤4:读取文本A的下一行,重复2,3,直到文本A读取完毕。大概思路就这样。

qq_35553864
阿卡阿卡 大概思路是对的,具体细节需要调整。
大约 4 年之前 回复
Dir_miao
Dir_miao 弱弱的问一下,有对的部分吗
大约 4 年之前 回复
qq_35553864
阿卡阿卡 看到了,你这个不太对。
大约 4 年之前 回复
Dir_miao
Dir_miao 我写到回答里面了,能看到吗?
大约 4 年之前 回复
qq_35553864
阿卡阿卡 看不到啊,我用的APP
大约 4 年之前 回复
Dir_miao
Dir_miao 我写的程序在问题后面,你看下思路正确吗?
大约 4 年之前 回复

有木有大神来点详解,或者模板什么的,看了好几天,实在是不知道该怎么做了。。。

说一下详细的要求和一个例子

Dir_miao
Dir_miao 自己写了一个程序一塌糊涂。。。。
大约 4 年之前 回复
Dir_miao
Dir_miao 哦哦,还有一点,没找到的输出NULL,比如“707be8”这一行在B文本里面没有,就在EDIT里面输出“707be8 NULL”大概就这个意思
大约 4 年之前 回复
Dir_miao
Dir_miao 拜托~~
大约 4 年之前 回复
qq_35553864
阿卡阿卡 懂了
大约 4 年之前 回复
Dir_miao
Dir_miao 就是这样一个过程,你明白我的意思了吗?
大约 4 年之前 回复
Dir_miao
Dir_miao 比如A文本中的“40c62a”这一行,要在B文本中找到包含这一行的内容(即“40c62a 10”这一行),然后把“40c62a 10”这一行输出到EDIT里面
大约 4 年之前 回复

CString buf1[256];
CStdioFile file;
CString str1;
file.Open("F:\a.txt",CFile::modeRead);
for(int i=0;file.ReadString(str1);i++)
{
buf1[i]==str1.Left(str1.Find('\r\n'));
CString buf2[256];
CStdioFile read;
CString str2,strTemp,str3;
read.Open("F:\B.txt",CFile::modeRead);
for(int j=0;read.ReadString(str2);j++)
{
buf2[j]==str2.Left(str2.Find(' '));
if(buf2[j]==buf1[i])
{
str3.Format("%x\n",buf2[j]);
strTemp+=str3;
strTemp+="\r\n";
}
SetDlgItemText(IDC_EDIT1,strTemp);
}
}

Dir_miao
Dir_miao 回复阿卡阿卡: 貌似一直是心算的,看来要学断点调试了
大约 4 年之前 回复
Dir_miao
Dir_miao 回复阿卡阿卡: 加油,谢谢你~
大约 4 年之前 回复
Dir_miao
Dir_miao 谢谢你~~
大约 4 年之前 回复
Dir_miao
Dir_miao 加油!!
大约 4 年之前 回复
Dir_miao
Dir_miao 加油!!
大约 4 年之前 回复
qq_35553864
阿卡阿卡 设断点,加监视,单步运行,查看运行过程
大约 4 年之前 回复
qq_35553864
阿卡阿卡 写程序最重要的是调试,靠心算是写不出来正确程序的。加油!
大约 4 年之前 回复
Dir_miao
Dir_miao 怎么改好呢
大约 4 年之前 回复
Dir_miao
Dir_miao 我有点懵了
大约 4 年之前 回复
qq_35553864
阿卡阿卡 单步调试,监视一下,试试。
大约 4 年之前 回复
qq_35553864
阿卡阿卡 这种写法有两个问题,线路可能会比较低,因为一直操作文件读写;另外就是文件多次打开,会有问题。
大约 4 年之前 回复
qq_35553864
阿卡阿卡 因为你这种写法,每次读A文本熊的一行,都把B中的所有行读了一边,就没必要再存储了
大约 4 年之前 回复
Dir_miao
Dir_miao EDIT一片空白啊。。。怎么就没输出呢,哎,我都要疯了
大约 4 年之前 回复
Dir_miao
Dir_miao 可以不是数组吗??之前用变量做不出来。才用数组的
大约 4 年之前 回复
Dir_miao
Dir_miao
大约 4 年之前 回复
qq_35553864
阿卡阿卡 另外,其实你的buf1和buf2没有必要是数组
大约 4 年之前 回复
qq_35553864
阿卡阿卡 你这种方式也可以。
大约 4 年之前 回复
qq_35553864
阿卡阿卡 if(buf2[j]==buf1[i]) { strTemp+=str2; strTemp+="\r\n"; } if(buf2[j]!=buf1[i]) { //这里记录那些没有出现在B中的行 } 这样写。
大约 4 年之前 回复
Dir_miao
Dir_miao 是不是应该修改读取B文本的方式
大约 4 年之前 回复
Dir_miao
Dir_miao 也是哦。。那我写的读取到数组的程序正确吗?
大约 4 年之前 回复
qq_35553864
阿卡阿卡 这样写的话如何记录40c62a后面的那两个字符呢。
大约 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐