一个读取*.csv文件的工具的源代码,利用对话框加入列表,将*.csv文件读入列表并显示到屏幕。有列序功能、对齐功能,是Everything输出和一些*.csv输出设备的快速浏览。注意使用前应将文本转换至ANSI格式。
#include "stdafx.h"
#include "★文件制表.h"
WORD kkk[100];//列宽保持
WORD ks;
void aa(CListCtrl& m_List,CArchive& arc,WORD align);
void kkks(CListCtrl& m_List);
int getFlieHeader(CString& asp,CListCtrl& m_List,WORD align)//此函数只在《测试文件头1.sln》项目上用
{
CFile ggg2;//创建一个写文件类对象
CArchive arc2(&ggg2,CArchive::load);//串化只读打开的文件
if(!ggg2.Open(asp,CFile::shareDenyNone|CFile::modeRead,NULL)) //CFile::shareDenyRead
{
AfxMessageBox(_T("不能打开aaa.csv"));
return 0;
};//打开一个输出文件
//getFlieHeader(arc2);
aa(m_List,arc2,align);
arc2.Close();
ggg2.Close();
return 0;
}
void aa(CListCtrl& m_List,CArchive& arc,WORD alings)
{
//列表标题用【__InsertItem】
ULONGLONG la0;la0=0;ULONGLONG la;la=arc.GetFile()->GetLength();//获得文件长度
char a[200];for(int b=0;b<200;b++)a[b]=0;//缓冲数组初始化
char* p0;p0=a; char* p1;p1=a;//指向缓冲数组的前后的指针
char aaa=0;//缓冲交换字符
WORD k=0;//
CString str0;
bool headls=false;//标题的结束,与内容的开始
int kj=1;
while(la0<la)//文件长度检查
{
arc>>aaa;la0++;
if(headls==false)
{
//0x2c"逗号"//0x0d"回车"//0x0a"换行"//0x22"引号"//0x09"制表符"
if((aaa==0x22)|(aaa==0x09)){continue;}//
if(aaa==0x2c)
{
if(k==0){m_List.InsertColumn(k++,_T("序"),alings,26);}
*p0=0;str0=p1; //str0跟随p1变化;
//m_list1.InsertColumn(0,_T("属性名称内容"));
m_List.InsertColumn(k++,str0,alings,kkk[k]);//LVCFMT_CENTER
p1=++p0;
continue;
}
if(aaa==0x0d){*p0=0;};
if(aaa==0x0a){
*p0=0;p0++;str0=p1;
m_List.InsertColumn(k,str0,alings,kkk[k]);//LVCFMT_LEFT
p1=p0=a;
headls=true;
m_List.InsertItem(m_List.GetItemCount(),str0);ks=k+1;k=0;
};
}
if(headls==true)
{
if(aaa==0x2c)
{
*p0=0;str0=p1; //str0跟随p1变化;
m_List.SetItemText(m_List.GetItemCount()-1,k++,str0);
p1=++p0;
continue;
}
if(aaa==0x0d){*p0=0;};
if(aaa==0x0a){
*p0=0;str0=p1;
m_List.SetItemText(m_List.GetItemCount()-1,k++,str0);
*p0=0;str0=p0;p0++;
CString str1;
str1.Format(_T("%d"),kj);kj++;//_T()
m_List.InsertItem(m_List.GetItemCount(),str1);
//k++;
// m_List.SetItemText(m_List.GetItemCount()-1,k++,str0);
p1=p0=a;k=1;continue;
};
}
*p0=aaa;
p0++;
}
}
void kkks(CListCtrl& m_List)
{
//ks++;
for(int b=0;b<ks;b++)kkk[b]=m_List.GetColumnWidth(b);
}
void lnitt()
{
for(int b=0;b<100;b++)kkk[b]=100;
}