VC 如何把文本文件中的内容读取出来并与对话框输入的ID比较?(还需要帮助~)

GL_010320327 2009-07-24 01:56:42
文本文件的格式如下:第一列为FixtureID,第二列为PCAREV,第三列为Pname.
FIXTUREID PCAREV PROGRAM NAME
G01308AB B P01308010C
G01309AC B P01308E044
G01376AE B P013084345
、、、、、、、、、、、 3列100行,每行中字符串以一个Tab间隔。程序的目的是从对话框中输入FixtureID和PCAREV,点击OK后读取文本文件中的内容与之比较,如果输入的FixtureID和PCAREV 与文本文件一行中的FixtureID,PCAREV一致,则读取第三列的Pname并将其插入c:\\USER\\OBJECT\\startup.bch文件中第1,7,15行中%s位置,其他内容不能改变。
1:!! copy M:\QLogic\%s \%s .* C:\User\OBJECT\%s.*
2:
3:!! del *.obc
4:
5:/* TRANSLATE AFTER FILE LOADING */
6:TRAN
7:NAME=%s
8:su=ica
9:RUN
10:
11:!! del *.tpg
12:
13:/* RUN TEST PROGRAM */
14:DIAGNOSE
15:NAME=%s
16:Mode=TEST
17:Messages=CRT
18:RUN
19:
20:/* DEL ALL FILE AFTER ABORT */
21:
22:!! rm *
23:
24:/* SHUT OUT MONITOR PAGER */
25:
26:SHUT
27:
现在有如下的程序,是gg606大哥帮修改过的,但还有点问题,请教一下该如何修改啊?
//========================
struct PROGRAM
{ char FixtureID[20];
char PCAREV[5];
char Pname[30];
}prog[100];
//========================

void CStartTestDlg::OnOKToStartTest()
{
UpdateData(TRUE); //更新m_FixtureID、m_PCAREV
//=============================================================================

FILE *fp;

int i;
i = 0;

fp = fopen("C:\\USER\\Program.txt","rt");//以读模式打开文本文件
if(NULL == fp)
{
//报告打开文件失败
return;
}

for(i=0;i<99;i++)
{
//program_type progType;
while ( !EOF( fscanf("%S%S%S", prog[i].FixtureID, prog[i].PCAREV, prog[i].Pname)) )
{
if(m_FixtureID == prog[i].FixtureID && m_PCAREV == prog[i].PCAREV)
{

//strText.Format(_T("!! copy M:\\QLogic\\%s\\%sC:\\User\\OBJECT\\%s.*"、、、、、、、、、、));

CString path("c:\\USER\\OBJECT\\startup.bch");
try
{
CStdioFile f(path, CFile::modeWrite|CFile::modeCreate|CFile::typeText );
f.WriteString(prog[i].Pname);
f.Close();
break;
}
catch(CFileException * e)
{
e->ReportError();
e->Delete();
f.Abort();
break;
}
}
}
fclose(fp);


ShellExecute(NULL,NULL,_T("DownLoad.cmd"),NULL,_T("c:\\USER\\Start\\"), SW_SHOW);
EndDialog(IDOK);

}

急用,在线等待、、、
...全文
146 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GL_010320327 2009-07-30
  • 打赏
  • 举报
回复
谢谢大哥啦
gg606 2009-07-25
  • 打赏
  • 举报
回复
[code=C/C++]
struct PROGRAM
{
char FixtureID[20];
char PCAREV[5];
char Pname[30];
};//prog[100];


void CStartTestDlg::OnOKToStartTest()
{
UpdateData(TRUE); //这一句就可以更新m_FixtureID、m_PCAREV
//=============================================================================

FILE *fp;
fp = fopen("C:\\USER\\Program.txt","rt");//以读模式打开文本文件
if(NULL == fp)
{
//报告打开文件失败
return;
}

program_type progType;
while ( EOF != fscanf("%S%S%S", progType.FixtureID, progType.PCAREV, progType.Pname) )
{
if(m_FixtureID == progType.FixtureID && m_PCAREV == progType.PCAREV)
{
//这一句搞什么?
CFile f
strText.Format(_T("!! copy M:\\QLogic\\+Pname+\\+Pname+.* C:\\User\\OBJECT\\+Pname+.*")); //

CString path("c:\\USER\\OBJECT\\startup.bch");
try
{
CFile f(path, CFile::modeReadWrite);
int len = f.GetLength();
// char * pbuf = new char[len+1];
CString str;
char * pbuf = str.GetBufferSetLength(len+100);
f.Read(pbuf, len);
pbuf[len] = 0; //加结束符
CString str1;
str1.Format(pbuf, progType.Pname, progType.Pname, progType.Pname,
progType.Pname, progType.Pname);
f.SeekToBegin();
f.Write(str1.operator LPCTSTR(), str1.GetLength());
str.ReleaseBuffer();
f.Close();
break;
}
catch(CFileException * e)
{
e->ReportError();
e->Delete();
f.Abort();
break;
}
}
}
fclose(fp);

//??
ShellExecute(NULL,NULL,_T("DownLoad.cmd"),NULL,_T("c:\\USER\\Start\\"), SW_SHOW);
EndDialog(IDOK);

}
gg606 2009-07-25
  • 打赏
  • 举报
回复
[code=C++]
struct PROGRAM
{
char FixtureID[20];
char PCAREV[5];
char Pname[30];
};//prog[100];

void CStartTestDlg::OnOKToStartTest()
{
UpdateData(TRUE); //这一句就可以更新m_FixtureID、m_PCAREV
//=============================================================================

FILE *fp;
fp = fopen("C:\\USER\\Program.txt","rt");//以读模式打开文本文件
if(NULL == fp)
{
//报告打开文件失败
return;
}

program_type progType;
while ( EOF != fscanf("%s%s%s", progType.FixtureID, progType.PCAREV, progType.Pname) )
{
if(m_FixtureID == progType.FixtureID && m_PCAREV == progType.PCAREV)
{
//这一句搞什么?
CFile f
CFileException fex;
if(!f.Open("c:\\USER\\OBJECT\\startup.bch.bak", CFile::modeRead, &fex))
{
fex.ReportError();
break;
}
int len = f.GetLength();
char * pbuf = new char[len+2];
f.Read(pbuf, len);
pbuf[len] = 0; //加结束符
f.Close();

if(!f.Open("c:\\USER\\OBJECT\\startup.bch", CFile::modeReadWrite, &fex))
{
fex.ReportError();
break;
}
CString str;
str.Format(pbuf, progType.Pname, progType.Pname, progType.Pname,
progType.Pname, progType.Pname);
delete [] pbuf;
f.Write(str.operator LPCTSTR(), str.GetLength());
f.Close();
break;
}
}
fclose(fp);

//??
ShellExecute(NULL,NULL,_T("DownLoad.cmd"),NULL,_T("c:\\USER\\Start\\"), SW_SHOW);
EndDialog(IDOK);

}
gg606 2009-07-25
  • 打赏
  • 举报
回复
fscanf("%s%s%s", progType.FixtureID, progType.PCAREV, progType.Pname)
这里的"%s%s%s", s用小写!

如果你要多次执行这样的操作,建议先将最初的startup.bch文件做一个备份,
然后每次读取这个备份文件的内容作为格式串用。
wallerobot 2009-07-24
  • 打赏
  • 举报
回复

我发现的一个参考物,可以看看,里面或者有你需要的例子

一些例子

16,548

社区成员

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

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

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