镇楼图
Pixiv:唄
csv文件又叫做逗号分隔值文件。每一列用逗号,
隔开,每一行用换行符\n
隔开,这样的文件格式固定也容易处理,可以通过EXCEL获取。据我所知有很多游戏设计者会将构思的方案或者平衡好的数据放在excel里,然后需要程序员便对此进行处理来获取数据。
注:本篇blog需要你会C语言风格的IO
博主写的关于C语言IO的随笔
点我
==================
要处理的数据文件data.csv
黑魔术师,2500,2100
盖亚,2300,2100
猛犸的墓地,1200,1000
银牙狼,1200,800
友谊天使,1200,800
巴比伦,800,600
一开始我尝试使用结构体,发现太复杂了,而且无法用一个变量索引到结构体的成员变量,不具有通用性还有bug
于是我改成三维数组了(因为太菜只能一个个getc)
#include<stdio.h>
#include<stdlib.h>
#define f(n) (n)
void csvdata(FILE*,int);
int main(void){
FILE* fp;
char n;
printf("请输入要截取的数据数:\n",&n);
scanf("%d",&n);
csvdata(fp,n);
}
void csvdata(FILE* fp,int n){
fp = fopen("data.csv","r");
char s[5][3][20];
for(int i = 0;i < 5;i++){
for(int j = 0;j < 3;j++){
int count = 0;
for(int k = 0;;k++){
s[i][j][k] = getc(fp);
int ch = s[i][j][k];
if(ch == '\n' || ch == ',')break;
count++;
}
for(int k = 0;k <= count-1;k++){
printf("%c",s[i][j][k]);
}
printf("\n");
}
}
fclose(fp);
}
但在最后我学习到了一个很神奇的格式化
能让我学会如何去处理各种格式固定的数据文件。
#include<stdio.h>
#define f(n) (n)
void csvdata(FILE* , int);
int main(void){
FILE*fp;
char n;
printf("请输入要截取的数据数:\n",&n);
scanf("%d",&n);
csvdata(fp,n);
}
void csvdata(FILE*fp , int n){
fp = fopen("data.csv","r");
char name[f(n)][20],atk[f(n)][20],def[f(n)][20];
for(int i = 0;i < n;i++){
fscanf(fp,"%[^,],%[^,],%[^\n]\n",name[i],atk[i],def[i]);
//正是这个[]不仅让截取字符串变得简单
//注:scanf(%s,%s,%s\n)有很诡异的效果
//有兴趣的可以试试
}
for(int i = 0;i < n;i++){
printf("%s,%s,%s\n",name[i],atk[i],def[i]);
}
//这里已经是处理数据部分了
//你可以对数据做更多复杂的处理
fclose(fp);
}
如果说输出中文出现了乱码
那么最有可能的原因是编码问题,这里我是用Notepad++转换编码
看右下角的编码是UTF-8,而我要做的是把UTF-8的编码改成GB2312
你可以清楚地看到,输出的正是GB2312编码的数据,而你存入这个字符的时候却是用UTF-8的编码,那也难怪会出错了。
这里只要在GB2312编码下输出中文即可
修正后的结果