从文件中读取并比较/合并数据以创建新文件

时间:2017-06-13 05:12:46

标签: c++

我真的希望得到一些帮助。 我有两个文件,一个txt文件和一个xls文件,在txt文件中它包含学生姓名及其ID的列表。在xls文件中,它包含字母和分配给它们的一些数字。 我需要为每个学生创建一个新的txt文件,其ID为文件名。在这个文件中,我需要显示分配给组成学生姓名的字母表的数字。请帮助我,真的无法在txt file xls file Alphabet.txt

的时间内弄明白

到目前为止,我使用C ++做的是从txt文件中读取数据,并将xls文件转换为txt文件,并从中读取。我是否需要将数据存储在数组中,或者更容易转换为生成的文件

#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;


int main()
{
    ifstream inputa("Students.txt");
    ifstream inputb("Alphabet.txt");
    if (!inputb.is_open()) std::cout << "Error: File Not Open" << '\n';


/* ofstream output;
output.open("output.txt");
 This was just to see if it was getting anything 
*/

string name;
string id;
string alphabet;
string number;


while (inputa >> name >> id || inputb >> alphabet >> number) { 
    /* here i planned to compare the strings using string::find, but it doesnt work */

    }







system("pause");

return 0;

}

1 个答案:

答案 0 :(得分:1)

在撰写本文时,您仍然没有给出一个包含ID和学生名称的文件的示例,因此我可能错误地订购了,但您应该明白这一点。

我只是读取字母文件,存储编码,然后一步写出所有学生文件:

#include <cstdlib>
#include <fstream>

static int encoding_map[256] = {0};

bool load_encoding(const char* file_name)
{
    std::ifstream file;
    file.open(file_name);
    if (!file.is_open()) return false;

    char from = 0;
    int to = 0;
    while (file >> from >> to) encoding_map[(int)from] = to;

    return true;
}

bool write_student_files(const char* src_file)
{
    std::ifstream file;
    file.open(src_file);
    if (!file.is_open()) return false;

    std::string id;
    std::string name;

    std::ofstream outfile;
    while (file >> id >> name)
    {
        outfile.open(id + ".txt");
        for (char c : name) outfile << encoding_map[(int)c];
        outfile << '\n';
        outfile.close();
    }

    return true;
}

int main()
{
    load_encoding("encoding.txt");
    write_student_files("students.txt");
    return EXIT_SUCCESS;
}

这是我的编码文件(字母文件),encoding.txt

a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
i 9
j 10
k 11
l 12
m 13
n 14
o 15
p 16
q 17
r 18
s 19
t 20
u 21
v 22
w 23
x 24
y 25
z 26

这是我的学生档案students.txt

0 bob
1 susan
2 joe
3 becky

如果我使用g++ -std=c++11 main.cpp编译代码并运行它,我会在同一目录中获得4个新文件:

0.txt
1.txt
2.txt
3.txt

例如,0.txt的内容是:

2152

如果您愿意,可以使用空格,但是,使用我的简单编码:

b => 2
o => 15
b => 2

意思是输出正确(虽然不是很漂亮)。

显然,这并没有做太多的错误处理,也没有处理多个单词的名称等,但是你应该能够从这里找到它。