尝试从每个预期数据之间有多个空间的文件中读取和存储数据
trying to read and store data from a file where there are multiple spaces between each intended data
这是我读取和存储数据的简单代码。我有一个文本文件,在文本文件中是我要传递给number
和text
的数据。如果文本文件包含诸如2 HelloWorld1
, 2 之类的文本,则该代码运行正常,并且存储在number
中, Helloworld1 存储在text
中。
但是,如果TXT文件中的文本就是这样,2 Hello World 1
在Hello,world和1之间有空间?我的问题是, 2 是否可以存储在number
和 Hello World 1 中,可以存储在text
中。我知道,由于空间空格,因此仅 2 和 hello 分别存储在number
和text
中。有没有办法克服这一点?
using namespace std;
int main(){
ifstream theFile("key.txt");
int number;
string text;
while(theFile>>number>>text){
cout<<number<<" and "<<text<<endl;
}
}
您对默认流操作员>>不幸(如果确实是您的情况(。
1:知道格式
前进的道路是知道从您的帖子中判断的格式您对您的帖子有些不确定。
2:使用最佳工具
之后,您为作业选择合适的工具。这可能涉及:std :: getline和手动,也许是使用正则表达式(在您的情况下,相当简单(,boost :: Spirit,tokenization Techniques,boost :: String_algo,lex/bison等。我会补充说,自定义流操作员功能(虽然可能(很少是直接的选择。
3:设计格式以匹配
作为了解格式的替代方法,如果您可以设计它,那就更好了。如果您具有记录样式格式,则使用空格处理字符串的简便方法是将字符串延续到最后 - 然后将每个记录放在一条线上。这样,您可以首先使用EG查看每条线。std::getline
,然后仅将流操作员用于其余部分 - 知道字符串将是最后的。其他定界符(除线额(当然也可行。
我想为@darune的很好答案添加一个示例。
这一切都取决于输入格式。
假设您的行以一个数字开头,然后以字符串结尾,您可以使用以下方法:
- 首先阅读带提取器操作员>> 的数字
- 使用getline读取其余的
请参阅:
#include <iostream>
#include <string>
#include <sstream>
#include <cctype>
#include <algorithm>
#include <regex>
std::istringstream testData (
R"#(1 data1
2 data2 data3
3 data 4
)#");
int main()
{
// Definition of variables
int number{};
std::string str{};
// Read file
// Read the number
while (testData >> number)
{
// Read the rest of the line in a string
getline(testData, str);
// Remove leading and trailing spaces
str = std::regex_replace(str, std::regex("^ +| +$|( ) +"), "$1");
// Show result
std::cout << number << ' ' <<str << 'n';
};
return 0;
}
结果:
1 data1
2 data2 data3
3 data 4
,但如上所述,这在很大程度上取决于输入格式
- 将从格式化文本文件读取的文本数据存储到链表
- 将线程中的数据存储到全局容器的最佳方法?
- 将数据存储在内存中以供以后访问
- 将一个阵列中的数据存储到另外两个阵列中不起作用
- 如何将函数的输出数据存储在文本文件中
- 将结构数据存储在循环缓冲区中
- 安卓中的Qt和应用程序数据存储
- C++ 将数据存储在对齐数组的中间
- 如何删除字符串中的所有空格并将数据存储在两者之间
- 实现双链接列表,其中数据存储在堆上
- 是否有一种方法可以从文本文件中读取并将单个数据存储为不同的变量
- 了解字符数组初始化和数据存储
- 如何在C++中将字符串数据存储在字符串 2D 数组中
- 将数据存储在具有可互换 x/y 坐标的 2D 矩阵中
- 将文件中的数据存储到数组中
- 将数据存储到地图
- 保存和加载类数据存储在C 中的二进制文件中
- 将由结构构建的数组传递到将数据存储到文件中的函数
- 在这种情况下,将数据存储在诸如SQLite之类的数据库中,还是存储在平面文本文件中更好
- 将数据存储在char数组中导致变量周围损坏