我需要将包含7行的文本文件读入7个不同的变量。文本文件如下所示:
.2661
A.txt
B.txt
C.txt
1
2
0.5 0.6
这些是我需要将每一行存储到的变量:
float value1; // line 1 from .txt file
char *AFileName; // line 2 from .txt file
char *BFileName; // line 3 from .txt file
char *CFileName; // line 4 from .txt file
int value2; // line 5 from .txt file
int lastLineLength; // line 6 from .txt file
double lastLine[lastLineLength]; // line 7 from .txt file - this can be different lengths
我目前通过在命令行和argv命令中调用程序时使用参数来执行此操作。
答案 0 :(得分:1)
首先使用具有读取权限的fopen
打开文件:
FILE *inputFile = fopen(filename, "r");
if(!inputFile) {
// Error opening file, handle it appropriately.
}
然后使用fscanf从文件中读取数据。第一个参数是我们在上面创建的FILE *
。第二个参数是一个格式字符串,用于指定在读取文件时fscanf
应该期望的内容。其余参数是指向将保存从文件读取的数据的变量的指针。
int variablesFound;
variablesFound = fscanf(inputFile, "%f\n%s\n%s\n%s\n%d\n%d\n", &value1, AFileName, BFileName, CFileName, &value2, &lastLineLength);
if(variablesFound < 6) {
// There was an error matching the file contents with the expected pattern, handle appropriately.
}
double lastLine[lastLineLength];
// Iterate over the last line.
int lastLineIndex;
for(lastLineIndex = 0; lastLineIndex < lastLineLength; lastLineIndex++) {
fscanf(inputFile, "%lf", &lastLine[lastLineIndex]);
fscanf(inputFile, " "); // Eat the space after the double.
}
在评论之后,我意识到可能值得注意的是,你必须将内存分配给你的变量作为真正的第一步。原语(下面有&
的原语)可以声明为正常。对于字符串(char数组),您需要执行以下操作之一:
char *aFileName = calloc(MAX_FILENAME_SIZE + 1, sizeof(char));
或
char aFileName[MAX_FILENAME_SIZE + 1];
取决于您aFileName
的目的是什么决定哪种方法适合。但是,假设此代码出现在main
中或者不需要存在于函数范围之外,后者会更好,因为它不需要free()
变量后的变量完成它。
如果您的需求经常变化,单挑处理读取输入的代码也可能是值得的。
答案 1 :(得分:0)
您可以按如下方式从文件中读取:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
FILE * fp;
char * line = NULL;
size_t len = 80;
fp = fopen("<path to your file>", "r");
if (fp == NULL)
exit(-1);
while (getline(&line, &len, fp) != -1)
printf("%s", line);
fclose(fp);
return 0;
}
getline从文件中读取字符串,因此您必须根据需要解析这些行(atoi,atof)。