c - 从文件中存储多种类型的数据

标签 c file extract store

谁能帮我解决以下问题:

我有一个只有一行的文件,其中包含以下由空格分隔的组

  • 实数
  • 整数
  • 十六进制数
  • 字符'N'

这里有一些例子:

    0 0.3 -1 +3 0xc 'N'

    2.12211 1 -100 'N' 0xac 'N'

基本上第一行可能包含实数、整数、十六进制数、字符'N',每组之间用空格分隔

有没有办法创建一个包含由空格分隔的元素(十六进制数也应转换为十进制数)的多种类型(在 C 中,而不是在 C++ 中)的 vector ?

第一个例子应该是

 V[0]=0
 V[1]=0.3
 V[2]=-1
 V[3]=3
 V[4]=12
 v[5]='N'

第二个例子应该是

V[0]=2.12211   
V[1]=1
V[2]=-100
V[3]=3
V[4]='N'
v[5]=172
V[6]='N'

最佳答案

规则 #1:避免过早优化。

定义数据类型:

enum data_type {
    data_type_integer = 0,
    data_type_float,
    data_type_char,
    ...
};

现在定义包含这些数据的结构:

struct data {
    enum data_type data_type;
    int data_integer;
    float data_float;
    char data_char;
};

当然这会浪费一些空间,但除非您编写数据库引擎或其他东西,否则请记住规则 #1。如果它真的困扰你,将数据(不是 data_type)打包到 union 中。但是如果你在 union 上犯了错误,它会咬你一口(因为编译器无法检查,例如,你存储了 char 并读取了 int)。

现在您有一个类型来存储各种数据类型。

要解析它,有多种方法。我建议将每个项目作为一个字符串读取,然后使用 sscanf 解析该字符串。之所以采用这种两步法,是因为您可以通过检查字符串内容来确定类型:如果包含“N”,则为“N”。如果它包含“e”、“E”或“.”它是 float 的,等等。

关于c - 从文件中存储多种类型的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48428395/

相关文章:

search - Lucene 编号提取

php - 如何获得 youtube 视频 ID (PHP)

python - 检查是否存在重复,然后在行中附加一个唯一的数字?

c++ - "Cleaning up"嵌套 if 语句

c - 为什么在使用函数时无法正确添加到链表?

c - 解引用指向不完整类型的指针未编译

Python-从文本文件或列表中获取特定字符

java - 在Java中提取大写字符的最快方法

c - 避免总线错误 : 10 during test cases

c - 如何在 X11 上监视所有 Windows(不仅仅是一个)中的鼠标移动事件