读取以逗号分隔的数字,并将其写入以制表符分隔的文件
Read numbers separated by comma and write them to a file separated by tab
给定一个输入文件,例如:
5,6
3,4
4,7
我想将其转换为以下输出,其中数字由制表符分隔:
5 6
3 4
4 7
我有以下代码读取输入文件并尝试写入输出文件:
std::ofstream outputFile("test.txt");
if (outputFile.is_open()) {
while(std::getline(infile, line, ',')) {
std::stringstream linestream(line);
int val1;
int val2;
linestream >> val1 >> val2;
outputFile << val1 << "t" << val2 << "n";
}
}
问题是我的输出文件包含:
1 -1431507824
3 5
6 6
2 6
有人可以解释为什么会发生这种情况吗?
您用逗号分隔,因此在第一次调用中只读取一个值。一种可能的解决方法是将一行读取到换行符,然后在两个值之间的逗号中显式读取:
while(std::getline(infile, line)) {
std::stringstream linestream(line);
int val1;
int val2;
char comma;
linestream >> val1 >> comma >> val2;
outputFile << val1 << "t" << val2 << "n";
}
std::getline(linestream, data, ',');
您读取了流中的第一个逗号的所有内容。这些数据将由您丢弃。
然后当你这样做时
linestream >> val1 >> val2;
您将剩余的值读入 val1
,然后提取将在 val2
内失败,因为没有更多要读取的内容。这将导致val2
未初始化并具有不确定的值。
一个简单的解决方案是简单地将字符串转换为data
(使用 std::stoi
(并分配给val1
(因为这是它包含的值(,然后将剩余的值读取到 val2
中。类似的东西
std::getline(linestream, data, ',');
val1 = std::stoi(data);
linestream >> val2;
通过您的编辑,上述答案仅部分有效。不过,解决方案基本相同。
因为您添加了","作为显式分隔字符。
在这里你想要什么
int main(){
std::ofstream outputFile("test.txt");
std::istringstream input;
input.str("5,6n3,4n4,7n");
string line;
stringstream linestream;
while(getline(input, line)) {
std::stringstream linestream(line);
int val1;
int val2;
char comma;
linestream >> val1>> comma >> val2;
outputFile << val1 << "t" << val2 << "n";
}
}
输出:
5 6
3 4
4 7
相关文章:
- 如何将 txt 文件中的行分隔为组件C++
- 无法通过空白将文本文件行分隔为矢量
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 读取制表符分隔的文件时出现问题 C++
- 如何更新和删除文本文件中的特定逗号分隔值?C++
- 如何将逗号分隔的文件读取为 2D int 数组?
- 读取带有分隔C++的文件
- 嵌套结构,从由空行分隔的文件中读取数据
- 如何逐行从文件中获取单词,并在C++中用分号分隔?
- 如何从文件中读取用空格分隔的数字
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- C++将分隔文件导入矢量
- C++ 在关键字段上联接两个管道分隔文件
- 当数据包含空格时,如何将制表符分隔文件的内容加载到C++字符串的 2D 向量中
- C++ 读取分隔文件并创建对象
- C++:读取分隔文件并存储在结构中
- 如何读取分隔文件的最后一行
- 如何在 Xcode 中分隔文件类
- visual c++6-用c++编辑管道分隔文件