文本文件的格式如下:第一列为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); }急用,在线等待、、、

解决方案 »

  1.   

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

  2.   

    fscanf("%s%s%s", progType.FixtureID, progType.PCAREV, progType.Pname)
    这里的"%s%s%s", s用小写!如果你要多次执行这样的操作,建议先将最初的startup.bch文件做一个备份,
    然后每次读取这个备份文件的内容作为格式串用。
      

  3.   

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