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