使用 C++ 将空格分隔值文本转换为 .csv 然后保存 [关闭]

Posted

技术标签:

【中文标题】使用 C++ 将空格分隔值文本转换为 .csv 然后保存 [关闭]【英文标题】:Convert space separated value text to .csv with c++ then save it [closed] 【发布时间】:2018-02-09 12:19:27 【问题描述】:

如何使用 c++ 将 .asc 文件(空格分隔值)转换为 .csv 文件,然后在 pc 或 android 上将其保存为 .csv 文件。

注意:这个 .asc 文件用于 srtm 数据,所以它很大,有 3600 行和 3600 列。 请不要使用excel之类的软件。 我在谷歌搜索但没有结果

编辑

看图看例子1

.asc 文件:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 2 3 3 3 4 4 5 5 4 5 5 6 6 6 6 5 5 4 3 3 2 3 5 6 7 7 8 9 10 10 10 11 12 11 10 10 11 13 14 14 14 13 13 12 12 11 11 11 11 11 10 10 10 10 10 10 11 11 13 14 13 13 13 14 14 15 14 14 14 14 14 14 14 14 14 14 16 17 18 20 23 27 31 32 35 38 41 43 44 46 47 48 50 50 49 49 50 51 51 54 55 56 58 59 59 61 62 62 62 61 58 54 53 52 52 51 51 53 54 53 51 50 50 49 49 50 51 52 53 53 52 51 51 52 57 62 61 59 57 57 57 60 60 60 59 58 58 58 58 57 57 57 61 63 64 62 -32768 然后换行 和其他数字遵循相同的模式,由空格分隔的数据数

注意 如图

我就知道了:

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

int main () 

  ofstream file;

  file.open ("example.txt");

  file << "Please write this data to a file using C++\n";

  file.close();

  return 0;


但不读取然后转换

【问题讨论】:

您的 .asc 文件中有文字吗?你能从你的 .asc 文件中添加一些示例数据吗? 我编辑并放了一个例子,但我可以发布图片 您可以将其添加为文本以便我复制吗? 是的,顺序如图所示 您的预期输出是什么?因为每个数值也用空格分隔。一个 csv 文件的内容类似于 ncols,180,nrows,144.... 【参考方案1】:

我创建了一个小型 C++ 程序,可以解决您的要求。

int main()

   std::ifstream ascfile;
   std::ofstream csvFile;
   ascfile.open("source.asc");
   csvFile.open("output.csv");

    if (ascfile.is_open())
        
            std::string line;
            while(std::getline(ascfile, line))
            
                int p = 0;
                while ((p = line.find(' ', p)) != std::string::npos)
                
                   line.insert(p, ",");
                   p += 2;
                
                 csvFile << line <<std::endl;
            

        
        else
        
            std::cout << "Sorry, the file could not be openend." << std::endl;
            return -1;
        
   ascfile.close();
   csvFile.close();
   return 0;

添加头文件iostream、fstream、字符串

你好我修改了上面的程序,上面的程序不要替换空格,而是使用下面的程序,但必须添加头文件:-

int main()

   std::ifstream ascfile;
   std::ofstream csvFile;
   ascfile.open("source.asc");
   csvFile.open("output.csv");

    if (ascfile.is_open())
        
            std::string line;
            while(std::getline(ascfile, line))
            
                std::replace( line.begin(), line.end(), ' ', ',');
                csvFile << line <<std::endl;
            

        
        else
        
            std::cout << "Sorry, the file could not be openend." << std::endl;
            return -1;
        
   ascfile.close();
   csvFile.close();
   return 0;

【讨论】:

非常感谢您的努力,但运行这两个代码时出现错误:此范围内未声明替换。 我在google里搜索 你应该添加头文件 谢谢,我已经找到了解决办法,然后附上,再次感谢您 但是为什么所有这些都投反对票:(

以上是关于使用 C++ 将空格分隔值文本转换为 .csv 然后保存 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 将 XML 转换为 CSV,用于在单个标记中以空格分隔的多个记录

使用 sed 将 \s+ 分隔文件转换为 csv

导出CSV文件是以逗号为分隔符的吗?

使用逗号分隔符将单个 CSV 列批量转换为多个

CSV 帮助 |文本分隔符 |使用 LibreOffice

使用 String.split() 将带有引号的 csv 文件拆分为文本分隔符