我有一个文件,包括(ID-9位数、名称-10位数、数量-4位数),例如:
123456789 Dany Bany 1000
999999999 Bill 9我想阅读这些细节: ID到string,Name to string,number to int。
我该怎么做?我认为有两个字的名字,有些有一个字。我试着用这个词,但是两个单词的名字有问题:
while (fscanf(file, "%s %s %d", id, name, &quantity) > 0) {
printf("%s %s %d\n", id, name, quantity);
}发布于 2017-06-12 16:54:01
使用fgets()逐行读取文件。
每一行都要做:
atoi()将其转换为整数。下面是这个逻辑的天真和仓促的实现:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LEN 100
int main(void)
{
char line[LEN];
FILE* fp = fopen("foo.txt", "r");
while (1) {
if (fgets(line, 100, fp) == NULL) break;
printf("%s", line);
char id[20];
int j = 0;
while(line[j] != ' ' && line[j] != '\0')
{
id[j] = line[j];
j++;
}
id[j] = '\0';
//printf("ID: %s\n", id);
j++;
size_t len = strlen(line);
int i, end = 0, k = 0;
char str_number[20];
for(i = len - 1; i >= 0; --i)
{
if(line[i] == ' ')
{
end = i;
++i;
while(i <= len)
str_number[k++] = line[i++];
break;
}
}
//printf("%s\n", str_number);
int number = atoi(str_number);
//printf("%d\n", number);
char name[20];
k = 0;
for(i = j; i < end; ++i)
name[k++] = line[i];
name[k] = '\0';
printf("ID: %s\n", id);
printf("Number: %d\n", number);
printf("Name: %s\n", name);
}
return 0;
}输出:
Georgioss-MacBook-Pro:~ gsamaras$ gcc -Wall main.c
Georgioss-MacBook-Pro:~ gsamaras$ ./a.out
123456789 Dany Bany 1000
ID: 123456789
Number: 1000
Name: Dany Bany
999999999 Bill 9
ID: 999999999
Number: 9
Name: Bill发布于 2017-06-12 15:48:22
一种方法是使用fgets()函数将整行读入字符数组,然后根据需要解析产生的字符串。
在解析结果字符串时,读取第一个空格之前的第一个字符并将其存储为ID字符串,然后在最后一个空格之后读取字符并转换为int。为此,您必须遍历char数组,同时使用ctype头文件中的库函数,如isspace()、isdigit()等。
发布于 2017-06-12 16:00:00
您可以逐行读取文件,并使用split来划分以下部分:
import std.stdio;
import std.array;
import std.conv;
void main() {
auto f = File("/tmp/file.txt", "r");
foreach (line ; f.byLine()) {
auto parts = line.split();
string id = parts[0].to!string;
string name = parts[1..$-1].join(' ').to!string;
int quantity = parts[$-1].to!int;
writeln("id ", id, " name ", name, " quantity ", quantity);
}
}https://stackoverflow.com/questions/44501991
复制相似问题