从C++文件自动创建CSV
Automatically create a CSV from a C++ file
我得到了一个GIS应用程序,它要求一个CSV作为输入,而该CSV的值是由另一个GIS程序以以下C++格式生成的:
class _shape_0
{
objectType="waterbody";
class Arguments
{
POSITION="[946.58899, 1087.7439, 0]";
TYPE="01_SaltLake";
ORIENTATION="45";
};
};
class _shape_1
{
objectType="vegetation";
class Arguments
{
POSITION="[962.88275, 1087.9946, 0]";
TYPE="02_PineWoods";
ORIENTATION="270";
};
};
class _shape_2
{
objectType="vegetation";
class Arguments
{
POSITION="[941.5755, 1068.6926, 0]";
TYPE="03_Wheatcrop";
ORIENTATION="135";
};
and so on...
因为输出文件包含数百个项目,所以我想使用一个自动脚本,将输出c++文件中的POSITION、TYPE和ORIENTATION转换为CSV,如下所示:
TYPE, POSITION [X, Y, Z], ORIENTATION
03_Wheatcrop, 941.5755, 1068.6926, 0, 135
02_PineWoods, 962.88275, 1087.9946, 0, 270
01_SaltLake, 946.58899, 1087.7439, 0, 45
有没有一种方法可以通过powerscript或类似的东西来实现?对我来说,使用notepad++及其正则表达式也是一种选择,尽管我更喜欢自动脚本。
一个依赖于固定行顺序的快速而肮脏的解决方案非常简单。如果记录的内部顺序不同,则需要更复杂的方法。
如果记录的顺序发生了变化,比如有时TYPE
在POSITION
之前,有时没有,则必须重新实现解析器。跟踪关键字和一些正则表达式的状态机应该在这种情况下工作。
简单解决方案的想法是读取文件并循环遍历所有行。如果找到一个包含POSITION
的行,让我们选取它和下两行。删除多余的字符并创建一个格式化字符串。最后,将所有内容保存在一个文件中。这没有使用正确的CSV输出,所以如果字段包含需要转义的值,脚本就会中断。如果是这种情况,则需要更复杂的基于自定义对象和export-csv
的方法。
$d = get-content c:tempinfile.dat # Read the incoming C++ish file
$rows = @() # Empty array for results
$rows += "TYPE, POSITION [X, Y, Z], ORIENTATION" #Header row
for ($i=0; $i -le $d.count -2; ++$i) { # Loop through the data
if( $d[$i] -match "POSITION" ) { # POSITION element, let's pick it and two next lines
$pos = $d[$i].Replace('POSITION="[', '').Replace(']";', '').Replace(' ', '') # Remove extra chars
$typ = $d[$i+1].Replace('TYPE="', '').Replace('";', '').Replace(' ', '')
$ori = $d[$i+2].Replace('ORIENTATION="', '').Replace('";', '').Replace(' ', '')
$rows += $("{0}, {1}, {2}" -f $typ, $pos, $ori ) # Add formatted string to array
}
}
set-content -path c:tempout.csv -value $rows # Write output to a file.
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 从Excel/CSV值创建静态数组
- 从CSV创建来自校友矩阵的无向加权图
- 如何使C++代码更快:使用 CFile 从相机数据创建.csv文件
- 在C++中编译时从CSV创建矢量
- 为游戏创建用户(读取和解析CSV文件)
- 试图创建csv,输出不断将数据放在新行上
- 从C++文件自动创建CSV
- 在 qt 中创建.csv C++文件
- (c++)读取CSV文件并使用信息创建对象(这将成为一个链表)