MFC的CFile类与列表控件的综合应用、获取文件的数据并写入到列表控件中

CFile类与列表控件的综合应用

使用什么样的方法从文件获取到的内容才方便给列表使用???

如果使用一行一行读取数据,把每一行放入一个CString数组对象中,那么又怎么把每一行中以空格为分割的每一个子数据单独拿出来呢???

//*****1、创建表头,即列名,列从1开始计算
    m_allstudent.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);//样式
    m_allstudent.InsertColumn(1, _T("学号"), LVCFMT_CENTER, 150);
    m_allstudent.InsertColumn(2, _T("姓名"), LVCFMT_CENTER, 100);
    m_allstudent.InsertColumn(3, _T("年龄"), LVCFMT_CENTER, 50);
    m_allstudent.InsertColumn(4, _T("性别"), LVCFMT_CENTER, 50);
    m_allstudent.InsertColumn(5, _T("出生年月"), LVCFMT_CENTER, 100);
    m_allstudent.InsertColumn(6, _T("地址"), LVCFMT_CENTER, 100);
    m_allstudent.InsertColumn(7, _T("电话"), LVCFMT_CENTER, 100);
    m_allstudent.InsertColumn(8, _T("E-mail"), LVCFMT_CENTER, 171);
​
//*****2、获取文件中数据、并进行处理方便使用
//2.1、从文件一行一行取出数据、每一行给一个CString数组保存
    CStdioFile fin;
    CString FileName = _T("A:\\student.txt");
    fin.Open(FileName, CFile::modeRead);
    //逐行读取字符串
    CStringArray stusave;
    CString temp;
    int n = 0;
    while (fin.ReadString(temp))//逐行读取的内容存入参数中
    {//这里的Reading函数有程序bug,必须要到文件中敲一下空格,再删除,读出来的数据才是整行,不然就是只有第一个空格前面的数据
        stusave.Add(temp);
        temp = ' ';
        n++;//学生个数,实际个数减1
    }
​
//2.2、处理每行的数据,每行中以空格为分割把每一个小值取出来,即分割字符串的技术
    CStringArray sno;
    CStringArray sname;
    CStringArray age;
    CStringArray sex;
    CStringArray born;
    CStringArray address;
    CStringArray phone;
    CStringArray emails;
​
    for (int j = 0; j < n; j++)
    {
        int nPos = 0;
        int nPre_pos = 0;
        int count = 0;//用来定位属性在st里面的位置
        while (-1 != nPos) {//一次循环可以查一个小属性
            nPre_pos = nPos;
            nPos = stusave[j].Find(' ', (nPos + 1));
            //从(nPos + 1)开始找空格,找到就返回空格位置
            switch (count)
            {
            case 0:
                sno.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 1:
                sname.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 2:
                age.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 3:
                sex.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 4:
                born.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 5:
                address.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 6:
                phone.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
            case 7:
                emails.Add(stusave[j].Mid(nPre_pos, (nPos - nPre_pos))); break;
                    //文件每行的末尾必须有空格才能取出最后一个数据
            default:
                break;
            }
            count++;
        }
    }
​
//*****3、创建列表的行、并给每列赋值
    for (int i = 0; i < n ; i++)
    {
        //这里的列从0开始计数
        m_allstudent.InsertItem(i, _T("")); // 首先创建一个行,接下来在这个行插入每列的值
        m_allstudent.SetItemText(i, 0, sno[i]); // 设置第2列(姓名)
        m_allstudent.SetItemText(i, 1, sname[i]); // 设置第3列(年龄)
        m_allstudent.SetItemText(i, 2, age[i]); // 设置第4列(性别)        
        m_allstudent.SetItemText(i, 3, sex[i]); //参数依次代表:行、列、内容
        m_allstudent.SetItemText(i, 4, born[i]);
        m_allstudent.SetItemText(i, 5, address[i]);
        m_allstudent.SetItemText(i, 6, phone[i]);
        m_allstudent.SetItemText(i, 7, emails[i]);
    }
  • 1
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值