Pour lire des documents TXT en langage C, conditions requises: lecture par ligne, puis sortie vers le fichier TXT spécifié par ligne
Un bilan:
les problèmes rencontrés et les besoins de la situation:
- Le site Web Beijing Lightning Disaster Detection contient 629 éléments de données sur les catastrophes dues à la foudre à Beijing de 2002 à 2013. Pour effectuer un regroupement de texte, 629 éléments de données dans un fichier txt doivent être dispersés dans 629 fichiers txt , La classification manuelle prendra au moins 5 heures. Afin de gagner du temps, choisissez le langage C pour diviser 629 données en 629 fichiers txt afin de préparer les données pour le futur regroupement de texte.
Comme je n'ai pas lu le langage C depuis longtemps, j'ai oublié les fonctions d'entrée et de sortie de fichier pertinentes, je peux donc profiter de cette occasion pour revoir les connaissances pertinentes.
Les principales fonctions utilisées :
- ouvrir
- feof
- fgets
- fputs
- fclsoe
Afin de réaliser l'opération d'auto-incrémentation du nom du fichier de sortie, la fonction sprintf est utilisée comme une commande de formatage de chaîne. Il y a en effet beaucoup de creux au milieu. Veuillez attacher le code sous la forme d'un blog pour l'enregistrer!
Le temps est relativement court, donc le travail d'optimisation et d'embellissement du code n'est pas terminé!
code montrer comme ci-dessous
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * ReadSpeacialLine(int i)
{
char filename[] = "C:/Users/zhangbin/Desktop/tet/test.txt"; //文件名
FILE *fp;
int WhichLine=i; //指定要读取哪一行
int CurrentIndex=0; //当前读取的行
static char StrLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp))
{
if (CurrentIndex==WhichLine)
{
fgets(StrLine,1024,fp); //读取一行
printf("%s", StrLine); //输出
return StrLine;
}
fgets(StrLine,1024,fp); //读取一行,并定位到下一行
CurrentIndex++;
//printf("%s", StrLine); //输出
}
fclose(fp); //关闭文件
return NULL;
}
int main()
{
FILE * fd;
char * sBuf ;//= (char *)malloc(1024);
char * fileName = "C:/Users/zhangbin/Desktop/tet/";
char sName[1024];
//int num = 1;
//sprintf(sName,"%s%d.txt",fileName,num);
//printf("%s",sName);
//输出位置
for(int i = 0; i < 629; i++)
{
int num = i + 1;
sBuf = ReadSpeacialLine(i);
printf("%s",sBuf);
sprintf(sName,"%s%d.txt",fileName,num); //字符串格式化输出
printf("%s",sName);
fd = fopen(sName,"w");
fputs(sBuf,fd);
fclose(fd);
}
// free(sBuf);
return 0;
}
Données d'origine:
L'effet après extraction par ligne est le suivant:
Chaque fichier txt est similaire au contenu suivant: