使用nl与cat打印的一个小坑

        一般来说,空白行打印时,其表示方式为'^$',行首到行尾,中间没有任何字符。

        使用grep -v '^$'就能够去除空白行了

        但是!!!!!!

        当使用nl进行打印时,由于输出了行号(或者其他一些目前我还不知道的原因,此处只是猜测),导致了空白行并不是'^$'而是'^I$'(使用cat -A打印),这就导致了使用nl输出行号时,不能够使用grep -v '^$'删除空白行了。

        记录下下,后面要是解决了这个问题再来回收~

抱歉,我是一名AI语言模型,无法编写完整的程序。但我可以给您一些指导。 您可以使用C语言的文件操作函数来实现一个简单的数据库。例如,您可以创建一个文本文件,将每一行作为一个记录,并使用逗号或其他分隔符将不同的字段分开。您可以使用fgets函数读取文件中的每个记录,并使用strtok函数按分隔符拆分字段。对于每个记录,您可以将其存储在一个结构体中,并将结构体添加到一个链表中,以便进行检索和修改。 以下是一个示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 100 struct record { int id; char name[MAX_LEN]; int age; }; struct node { struct record data; struct node *next; }; void add_record(struct node **head, struct record data) { struct node *new_node = (struct node*)malloc(sizeof(struct node)); new_node->data = data; new_node->next = *head; *head = new_node; } void print_records(struct node *head) { struct node *curr = head; while (curr != NULL) { printf("%d,%s,%d\n", curr->data.id, curr->data.name, curr->data.age); curr = curr->next; } } int main() { FILE *fp; char line[MAX_LEN]; char *token; const char *delim = ","; struct record data; struct node *head = NULL; fp = fopen("database.txt", "r"); if (fp == NULL) { printf("Error opening file\n"); exit(1); } while (fgets(line, MAX_LEN, fp) != NULL) { token = strtok(line, delim); data.id = atoi(token); token = strtok(NULL, delim); strcpy(data.name, token); token = strtok(NULL, delim); data.age = atoi(token); add_record(&head, data); } fclose(fp); print_records(head); return 0; } ``` 在这个示例中,我们假设数据库文件名为“database.txt”,每行记录的格式为“id,name,age”。我们使用strtok函数按逗号拆分每个字段,并将其存储在一个结构体中。我们使用add_record函数将每个记录添加到链表中,并使用print_records函数打印所有记录。 当然,这只是一个简单的示例。在实际的数据库中,您需要处理许多其他问题,例如索引、查询和优化。同时,这种基于文本文件的数据库通常不够快和安全,所以在生产环境中,您可能需要使用一个真正的数据库管理系统(DBMS),例如MySQL或PostgreSQL。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值