现在在记事本中有如下数据:
116.442218,40.184768, 4.6, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184775, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184781, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442219,40.184788, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184795, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184802, 40.0, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184808, 8.2, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
如果现在要用VC编一个象记事本那样的程序,当我点打开时,找到上面的文件后,把上面的内容显示成如下的东西,其他的不让显示。也就是说要把上面的数据先处理成如下形式,存成.txt文件。
116.442218,40.184768, 4.6, 4.5,
116.442218,40.184775, 0.0, 0.0,
116.442218,40.184781, 0.0, 0.0,
116.442219,40.184788, 0.0, 0.0,
116.442217,40.184795, 0.0, 0.0,
116.442217,40.184802, 40.0, 4.5,
116.442217,40.184808, 8.2, 4.5,
请那位大虾帮个忙,帮我想想应该用个啥办法才能编好这个程序。
116.442218,40.184768, 4.6, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184775, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184781, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442219,40.184788, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184795, 0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184802, 40.0, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184808, 8.2, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
如果现在要用VC编一个象记事本那样的程序,当我点打开时,找到上面的文件后,把上面的内容显示成如下的东西,其他的不让显示。也就是说要把上面的数据先处理成如下形式,存成.txt文件。
116.442218,40.184768, 4.6, 4.5,
116.442218,40.184775, 0.0, 0.0,
116.442218,40.184781, 0.0, 0.0,
116.442219,40.184788, 0.0, 0.0,
116.442217,40.184795, 0.0, 0.0,
116.442217,40.184802, 40.0, 4.5,
116.442217,40.184808, 8.2, 4.5,
请那位大虾帮个忙,帮我想想应该用个啥办法才能编好这个程序。
读文件(一个字符一个字符的读),直到发现第四个“,”,把以前读的数据写入另一个文件,然后移动读文件指针(自己数数本行还有多少字符)。然后重复上面的操作。需要以下API函数:
CreateFile
ReadFile
ReadFileScatter
WriteFile
float a,b,c,d;
char ch[100];
fscanf(fp,"%f,%f,%f,%f%s",a,b,c,d,ch);//fp为文件
并且结帖了的:)http://www.csdn.net/expert/topic/941/941766.xml?temp=.7816584
fp.ReadString()
fp.WriteString()
CString string;
file.Open (filename,CFile::modeRead);
CArchive ar(&file,CArchive::load);
while(NULL!=ar.ReadString(string))
{
……………
ar.Left(length); //length为要提取的长度
……………
}
ar.Close ();
file.Close ();
有固定的格式和长度,很EASY偶最近在构思一个网页里的FORM元素提取分析的才算复杂呢还没有想到好办法
//sigh
1、读出一行,行的标志是'\A',也就是10号字符,保存在一个CString strTemp中
2、读取其中的最前面strlen("116.442218,40.184768, 4.6, 4.5,"+1)个字符
3、strTemp.setAt(strlen("116.442218,40.184768, 4.6, 4.5,"+1),'\A')也就是再加入一个换行符。
4、把这个字符串保存到一个新文件中就可以了。
循环1-4,直到文件尾。
就可以了
{
int i = NULL;
char cBuf = NULL;
DWORD dwData = NULL; while(ReadFile(hFile,&cBuf,sizeof(char),&dwData,NULL) != ERROR_HANDLE_EOF)
{
if(cBuf == 0x0D || cBuf == 0x0A)
{
lpBuffer[i] = '\0';
return TRUE;
}
lpBuffer[i ++] = cBuf;
} return FALSE;
}BOOL SplitString(LPSTR lpOrgString,FLOAT *fltCol1,FLOAT *fltCol2,FLOAT *fltCol3,FLOAT *fltCol4,LPSTR lpszCol5,LPSTR lpszCol6,LPSTR lpszCol7,LPSTR lpszCol8)
{
char *lpszStart = NULL;
char *lpszNext = NULL; lpszStart = lpOrgString;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
(*fltCol1) = (FLOAT)atof(lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
(*fltCol2) = (FLOAT)atof(lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
(*fltCol3) = (FLOAT)atof(lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
(*fltCol4) = (FLOAT)atof(lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
strcpy(lpszCol5,lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
strcpy(lpszCol6,lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
strcpy(lpszCol7,lpszStart);
} lpszStart = lpszNext + 1;
lpszNext = strchr(lpszStart,',');
if(lpszNext)
{
lpszNext[0] = '\0';
strcpy(lpszCol8,lpszStart);
} return TRUE;
} .
.
.
HANDLE hFile;
char szBuffer[1024];
FLOAT fltCol1;
FLOAT fltCol2;
FLOAT fltCol3;
FLOAT fltCol4;
char szCol5[64];
char szCol6[64];
char szCol7[64];
char szCol8[64]; hFile = CreateFile(...); //此处略
while(ReadFileALine(hFile,szBuffer))
{
if(szBuffer[0])
{
SplitString(szBuffer,&fltCol1,&fltCol2,&fltCol3,&fltCol4,szCol5,szCol6,szCol7,szCol8);
//你自己处理吧:)
}
} CloseFile(hFile);
.
.
.写的有些笨,但思路应该没人说不对吧:)
代码优化就靠你自己了;)
如果是固定格式的文本,则下面的代码应该可以解决问题:.......FILE *fp=fopen("specific.txt","rb");
FILE *fp1=fopen("destinat.txt","wb");
char buffer[35];.......fread(buffer,32,1,fp);
buffer[32]=0x0d; buffer[33]=0x0a; buffer[34]=0;(在屏幕上显示文本)fwrite(buffer,34,1,fp);......
e.g.
#include "stdio.h"
FILE *fp;
float f1,f2,f3,f4;
char s1[10],s2[20],s3[20],s4[20];
fp=fopen("Data.txt","rt");
fscanf(fp,"%f,%f,%f,%f,%10s,\"%s\",\"%s\",\"%s\"",&f1,&f2,&f3,&f4,s1,s2,s3,s4);
form/html用regexp/常规表达式