Java 行不';不要遵循特定的模式,可能会有所不同
我在文本文档中有数据,其中一些行的参数(没有特定顺序)比其他行多。数据中大约有90个参数 e、 g 前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} 我希望数据得到处理,并显示为: 以下是数据的外观:Java 行不';不要遵循特定的模式,可能会有所不同,java,excel,matlab,json,Java,Excel,Matlab,Json,我在文本文档中有数据,其中一些行的参数(没有特定顺序)比其他行多。数据中大约有90个参数 e、 g 前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
我希望程序读取每一行,并将其放在适当的列中。我只知道java、excel和matlab。您的文件似乎是以格式编写的(有关更多信息,请参阅) 您可以使用matlab解析文件:
所有数据都应该是结构
out
,字段对应于列名 请张贴您尝试过的代码,如果您还没有这样做,请阅读如何创建。什么程序?如果不提供一些迹象表明您存在编程编码问题(例如,某些代码不工作),而不是要求提供代码编写服务,那么您很可能会得到负面响应。欢迎使用堆栈溢出!欢迎来到堆栈溢出!为了解决这个问题,你能在内容中有一个更好的标题和更详细的信息吗?
{"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}~{}
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);