从.csv文件中删除应仅包含数字的字符

时间:2014-04-03 12:20:45

标签: c++ string csv character editing

我目前有一个只应包含数值的.csv文件,但是某些列中存在错误,表示包含文本。我想知道删除这些字符的最佳方法是什么。

我正在考虑使用str.erase(std::remove(str.begin(), str.end(), 'xxxxxxx'), str.end());。为此,我需要将我的数据读入一个字符串,然后从该字符串中删除字母表。我目前正在这样做(我使用'?'作为分隔符,因为我知道我的文件中没有。)

#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

string Weather_test;
char chars[] = {'A','a','B','b','C','c','D','d','E','e','F','f','G','g','H','h','I','i','J','j','K','k','L','l','M','m','N','n','O','o','P','p','Q','q','R','r','S','s','T','t','U','u','V','v','W','w','X','x','Y','y','Z','z'};

int main()
{
    ifstream Weather_test_input;
    Weather_test_input.open("/Users/MyName/Desktop/Weather_test.csv");

    getline(Weather_test_input, Weather_test, '?');

    str.erase(remove(Weather_test.begin(), Weather_test.end(), chars[!eof]), Weather_test.end();

    cout << Weather_test;

    return 0;
}

这个问题是我不知道如何围绕chars [!eof]部分做什么。有什么建议吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

我建议您使用std::remove_if代替std::isalpha。也许像是

Weather_test.erase(
    remove_if(Weather_test.begin(), Weather_test.end(), std::isalpha),
    Weather_test.end());

答案 1 :(得分:0)

我设法做到了。这是有效的最终解决方案!

#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

string Weather_test;

int main()
{
    ifstream Weather_test_input;
    Weather_test_input.open("/Users/MyName/Desktop/Weather_test.csv");

    getline(Weather_test_input, Weather_test, '?');

    Weather_test.erase(remove_if(Weather_test.begin(), Weather_test.end(), ::isalpha), Weather_test.end());

    cout << Weather_test;

    return 0;
}

非常感谢Joachim Pileborg !!!