gpt4 book ai didi

c - 从C文件中读取移动数据(字符串和数字)

转载 作者:行者123 更新时间:2023-11-30 19:37:20 24 4
gpt4 key购买 nike

我有一个包含以下格式数据的文件:

/*Number          Date    Time        Status    Call_duration(in minutes)   */  
9893575103 22-09-2016 12:32:01 incoming 2
9893575102 22-09-2016 12:44:05 outgoing 3
9893575101 22-09-2016 12:59:23 missed 0
9793575103 22-09-2016 13:30:32 outgoing 9
9723575103 22-09-2016 14:44:44 incoming 4

我希望能够可靠地将这些数据读入 C 程序,然后在解析数据后对其进行操作。

我尝试使用 scanf 从文件读取数据后将数据存储在链接列表中:

struct Node {
struct node *queue;
struct node *front,*rear;
int num[10];
int dd,mm,yy,hr,min,sec;
float call_dur;
char status[15];
};

main()

{
node *rear=NULL;
node *front=NULL;
node *queue;
char ch;
FILE *fp;
fp=fopen("mobile_numbers.txt","r");
while((ch=getc(fp))!=EOF) {
fseek(fp,-1,1);
fscanf(fp,"%d %d-%d-%d %d:%d:%d %s %d", &queue->num, &queue->dd, &queue->mm, &queue->yy, &queue->hr, &queue->min, &queue->sec, queue->status, &queue->call_dur);
}

if(front==NULL)
front=queue;
else
rear->next=queue;
rear=queue;
queue->next=NULL;
}

fclose(fp);

while(queue!=NULL) {
printf("%d %d-%d-%d %d:%d:%d %s %d",queue->num, queue->dd, queue->mm, queue->yy, queue->hr, queue->min, queue->sec, queue->status, queue->call_dur);
queue=queue->next;
}

但这并没有给出所需的结果?任何人都可以建议更好的方法或看看我的代码有什么问题吗?

最佳答案

这有效。不确定您想如何处理数据,但这会打印到屏幕上。

#include <stdio.h>
#include <string.h>

#define MAXLINE 1000
#define MAXARG 20

FILE *f1;

int main(int argc, char *argv[])
{
char FileName[MAXARG];
char line[MAXLINE];

if (argc <= 1) {
printf("Usage - reads FileName and prints\n");
return 0;
}
else {
strcpy(FileName, *++argv);
}

f1 = fopen(FileName, "r");

while (fgets(line, MAXLINE, f1)) {
printf("%s", line);
}
}

注意:要调用它,您必须键入程序名称,然后键入文件名。

如果您想运行并保存数据以供解析,请尝试此操作(C read space-separated values from file 的重新挪用版本):

#define _XOPEN_SOURCE
#include <stdio.h>
#include <time.h>
#include <string.h>

typedef struct
{
char status[9];
time_t timestamp;
long int number;
int duration_mins;
time_t call_time;
} Call;

void dump_call(FILE *fp, const char *tag, const Call *c);
int inputLine(FILE *fp, Call *c);

enum { MAXCALL = 100 };

int main(void)
{
char line[4096];
Call calls[MAXCALL];

if (fgets(line, sizeof(line), stdin) == 0)
return 1;
for (int i = 0; i < MAXCALL && inputLine(stdin, &calls[i]) != 0; i++)
dump_call(stdout, "Call", &calls[i]);
return 0;
}

int inputLine(FILE *fp, Call *c)
{
struct tm tm;
// time_t epoch;
int out;
char temp[20], date_temp[9], time_temp[9];;
if ((out = fscanf(fp, "%ld %s %s %s %d",
&c->number, date_temp, time_temp, c->status, &c->duration_mins)) == 5) {
sprintf(temp, "%s %s", date_temp, time_temp);
if ( strptime(temp, "%d-%m-%Y %H:%M:%S", &tm) != NULL )
c->timestamp = mktime(&tm);
return -1;
}
return 0;
}

void dump_call(FILE *fp, const char *tag, const Call *c)
{
char date_time[20];
strftime(date_time, 20, "%d-%m-%Y %H:%M:%S", localtime(&(c->timestamp)));
fprintf(fp, "%s: %-10ld %-24s %-17s %3d\n",
tag, c->number, date_time, c->status, c->duration_mins);
}

这一次,要调用它,请键入程序名称,后跟 <然后是数据文件的名称;即:

read.exe < test_mobil.dat

希望这对伙伴有帮助 - 我也学到了很多东西 - 所以谢谢你。

关于c - 从C文件中读取移动数据(字符串和数字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39995690/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com