基于凌空触摸屏EVCbuilder软件历史控件存储的数据解析为csv文件
源代码(c语言)
static double dataPtr
[1000];
static double csvdataPtr
[1000];
char vcsv
[30];
char csv
[100];
char Path
[100];
char vPath
[100];
char csvPath
[100];
int i
, j
, rows
=0;
if (access("/home/ftp/data/csvprint", 0) != 0) {
debug_printf("path=%s\n", "new/home/ftp/data/csvprint");
system("mkdir /home/ftp/data/csvprint");
}
if (access("/home/ftp/data/print", 0) != 0) {
debug_printf("path=%s\n", "new/home/ftp/data/print");
system("mkdir /home/ftp/data/print");
}
strcpy($file
.filenamenow
, "test.bw");
sprintf(Path
, "%s/%s/%s", hmi_get_usr_data_dir(), "print", $file
.filenamenow
);
sprintf(vPath
, "%s/%s/%s%s", hmi_get_usr_data_dir(), "csvprint", $file
.filenamenow
, ".CSV");
if (access(vPath
, 0) == 0) {
remove(vPath
);
}
memset(dataPtr
, 0, sizeof(dataPtr
));
memset(csvdataPtr
, 0, sizeof(csvdataPtr
));
if (access(Path
, 0) == 0) {
debug_printf("tip=%s\n", "start");
FILE
*pFile
= NULL;
pFile
= fopen(Path
, "rb+");
if (pFile
!= NULL)
{
fread(&rows
, sizeof(int), 1, pFile
);
fread(&dataPtr
[0], sizeof(double), 2*rows
, pFile
);
debug_printf("tip=%s\n", "read");
fclose(pFile
);
}
debug_printf("rows=%d\n", rows
);
FILE
*pFile1
= NULL;
pFile1
= fopen(Path
, "wb+");
if (pFile1
!= NULL)
{
if (rows
>= 500) {
rows
= 500;
memmove(&dataPtr
[2], &dataPtr
[0], sizeof(double)*(2*(rows
-1)));
}else {
rows
++;
memmove(&dataPtr
[2], &dataPtr
[0], sizeof(double)*(2*rows
));
}
dataPtr
[0] = (double)$system
.CurDateTime
;
dataPtr
[1] = (double)$data
.重量读取值
;
debug_printf("tip=%s\n", "write");
fwrite(&rows
, sizeof(int), 1, pFile1
);
fwrite(&dataPtr
, sizeof(double), 2*rows
, pFile1
);
fclose(pFile1
);
}
}else {
FILE
*pFile2
= NULL;
pFile2
= fopen(Path
, "wb+");
if (pFile2
!= NULL)
{
dataPtr
[0] = (double)$system
.CurDateTime
;
dataPtr
[1] = (double)$data
.重量读取值
;
debug_printf("tip=%s\n", "new");
rows
= 1;
fwrite(&rows
, sizeof(int), 1, pFile2
);
fwrite(&dataPtr
, sizeof(double), 2, pFile2
);
fclose(pFile2
);
}
}
int year
, month
, day
, hour
, minu
, sec
;
FILE
*pFilec
= NULL;
FILE
*pFile3
= NULL;
pFile3
= fopen(vPath
, "w+");
pFilec
= fopen(Path
, "rb+");
if (pFilec
!= NULL)
{
memset(csv
, 0, sizeof(csv
));
fread(&rows
, sizeof(int), 1, pFilec
);
for (i
=1; i
<=2*rows
; i
++) {
memset(vcsv
, 0, sizeof(vcsv
));
fread(&csvdataPtr
[i
-1], sizeof(double), 1, pFilec
);
if (i
%2==0) {
sprintf(vcsv
, "%f\n",csvdataPtr
[i
-1]);
}else {
gettimeinfo(csvdataPtr
[i
-1], &year
, &month
, &day
, &hour
, &minu
, &sec
);
sprintf(vcsv
, "%4d-%2d-%2d %2d:%2d:%2d", year
, month
, day
, hour
, minu
, sec
);
strcat(vcsv
, ",");
}
if (pFile3
!= NULL)
{
fwrite(&vcsv
, sizeof(vcsv
), 1, pFile3
);
}
debug_printf("vcsv=%s\n", vcsv
);
}
fclose(pFile3
);
fclose(pFilec
);
}
思路:
先将已经存在的bin文件解析出来,存于中间文件;处理中间文件重新排序形成自己需要格式的文件格式;
转载请注明原文地址:https://tech.qufami.com/read-12644.html