在 CSV 文件中查找相同的名称.C++
Find same names in CSV files. C++
我正在尝试编写一个程序,该程序将比较两个或多个CSV文件并找到相同的名称名称,如果有两个或更多名称,则将其打印出来。每个名称只会在一个文件中出现一次。
下面是典型文件的外观。
Name,E-mail,Student Level,Major
John Doe, jdoe@something.com, Freshman, CS
Jane Doe, janed@something.com, Freshman, CS
....
因此,如果这些名称中的任何一个位于两个或多个文件中,程序应打印出其名称及其名称在文件中显示的总次数。
到目前为止,我已经做了很多。我已经让它只打印出一个文件中的名称。不知道下一步该怎么做。这是代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define buffer 1024
int main(){
FILE *fp;
char temp[buffer], *fn, *ln;
char *first[buffer], *last[buffer];
int line_count = 0;
fp = fopen("students.csv", "r");
while( (fgets(temp, buffer, fp) != NULL) )
{
first[line_count] = (char *)malloc(sizeof(char)* buffer);
last[line_count] = (char *)malloc(sizeof(char) * buffer);
ln = strtok(temp,",");
fn = strtok(NULL,",");
strcpy(first[line_count], fn);
strcpy(last[line_count], ln);
line_count++;
}
while(line_count--)
{
printf("Name : %s %sn", first[line_count], last[line_count]);
}
fclose(fp);
return 0;
}
我是C++新手(因此我用 C 编写代码),所以如果有人可以指出我正确的方向。那就太好了。谢谢。
当您从 CSV 输入文件中读取每个名称时,您应该尝试将其插入std::set<std::string>
(您需要#include <set>
并#include <string>
. 如果由于密钥已存在而失败,则您知道该名称是您的输出之一。
因为看起来你只是在寻找一个方法而不是代码(你已经喜欢写 C)。然后这里有一个使用你已经拥有的"方法"。
由于您已经成功解析了一个文件,只需对另一个文件重复该过程(复制,粘贴,更改一些名称等)。
然后你会有两组数组,比如第一 1、第一 2、最后 1、最后 2。现在,您只需逐步浏览它们即可找到任何匹配项(下面的 sudo 代码)。
for each line in first1 and last2
look for match in first2 and last2
log/print the matches
现在,就您如何做而言,我肯定会推荐更多C++代码。您可以利用 std::string 和 std::vector 功能来简化代码。
相关文章:
- 正在将csv文件读取为双精度矢量
- 如何选择在 csv 文件中输出的位置
- 有没有办法在不使用 getline() 的情况下从.csv文件中读取?
- 如何从 CSV 获取数据并将其存储在 C++ 中的表对象中
- 无法读取C++中的 CSV 文件
- 流:CSV 文件中的换行符
- 是否可以使用 Python csv 阅读器读取使用 C++ std::setw 生成的文件?
- 使用从文件(stod、strtod、atof)中提取的数据C++从字符串转换为双精度.csv
- 将一维数组写入 CSV C++中的不同列?
- 如何从CSV加载堆栈?C++
- 如何正确格式化csv文件?
- 正在分析CSV文件-C++
- 如何获取组件和搜索 CSV 文件
- C++ 中的 CSV 文件管理(特别是设置标头和每个标头将分别具有的值)
- 无法逐行读取.csv文件
- 以CSV格式编写特征矢量Xd
- 非常快速地阅读 CSV 文件
- 读取和存储 CSV 数据
- 该程序将.csv文件中的一系列单词放入数组中,然后随机生成句子.但它不起作用
- CSV文件之间的差异,使用getline()产生不同的结果