【问题标题】:Rows don't follow specific pattern and maybe different行不遵循特定模式并且可能不同
【发布时间】:2016-08-17 22:09:19
【问题描述】:

我在文本文档中有数据,其中某些行的参数(无特定顺序)比其他行多。数据中大约有90个参数。

例如 前 100 行有 4 个参数,例如:

{"A":1.675,"B":21.8,"C":34,"D":63}

现在第 150 - 200 行有 6 个参数,例如:

{"A":1.675,"B":21.8,"C":34,"D":63,"E":34,"F":87}

然后第 200-250 行再次像前 100 个喜欢 然后在第 350-400 行之间的某个地方再次有 6 个参数,但格式不同,例如:

{"A":1.675,"B":21.8,"C":34,"F":63,"E":34,"D":87}

我希望数据被处理并显示为:

这是数据的样子:

{"total_gas":0.0,"hook_load":9.7,"mud_flow_in":0.0,"pump_spm_total":0.0,"svy_azimuth":171.8872648725456,"pit_volume_8":0.0,"gain_loss":0.3,"pit_volume_7":0.0,"pit_volume_6":0.0,"block_height":114.9,"pit_volume_5":0.0,"pit_volume_4":0.0,"pit_volume_3":0.0,"pit_volume_2":0.0,"drill_hardness":0.0,"pit_volume_1":0.0,"strks_pump_3":0.0,"weight_on_bit":0.0,"strks_pump_1":0.0,"strks_pump_2":0.0,"standpipe_pressure":0.0,"mud_flow_out":0.0,"state":"InSlips","svy_depth":0.0,"mud_volume":484.1,"rotary_rpm":0.0,"strks_total":0.0,"hole_depth":0.0,"pump_spm_3":0.0,"pump_spm_2":0.0,"rop_fast":0.0,"pump_spm_1":0.0,"mud_temp_in":0.0,"svy_inclination":229.18301983006077,"mud_temp_out":0.0,"rotary_torque":0.006,"gamma_ray":0.0,"diff_press":0.0,"bit_depth":0.0,"rop_average":0.0}~{}

我希望程序读取每一行并将其放在适当的列中。我只知道java、excel和matlab。

【问题讨论】:

  • 请发布您尝试过的代码,如果您还没有这样做,请阅读如何创建minimal reproducible example
  • 什么程序?如果没有提供一些迹象表明您有编程编码问题(例如,某些代码无法正常工作),而不是看似要求提供代码编写服务,那么您很可能会收到不利的回应。
  • 欢迎来到 Stack Overflow!欢迎来到堆栈溢出!能否在您努力解决问题的同时,在内容中提供更好的标题和更详细的信息?

标签: java excel matlab


【解决方案1】:

您的文件似乎是以 格式编写的(有关详细信息,请参阅json info)。

可以使用matlab的regexp解析文件:

fid = fopen('/path/to/file');
line = fgetl(fid);
out = struct();
while ischar(line)
    res = regexp(line, '\{([^\}]+)\}','tokens','once');  %// remove {} from line
    if isempty(res)
       continue;  %// empty line?
    end
    res2 = regexp(res{1},'"([^"]+)"\s*:\s*([^,]+),?', 'tokens');  %// get the key-value pairs
    for ii=1:numel(res2)
        if isfield(out, res2{ii}{1})
           out.(res2{ii}{1}){end+1} = str2double(res2{ii}{2});
        else
           out.(res2{ii}{1}) = {str2double(res2{ii}{2})};
        end
    end
    line = fgetl(fid);
end
fclose(fid);

您应该拥有的所有数据都是结构out,其中的字段对应于列名。

【讨论】:

    猜你喜欢
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多