【问题标题】:Is it possible to have a variable range and columns using csvRead in Scilab 5.5.2是否可以在 Scilab 5.5.2 中使用 csvRead 具有可变范围和列
【发布时间】:2016-06-10 22:14:18
【问题描述】:

我是一个相当新手,使用 Scilab 自学成才的程序员。我有想要阅读的 .csv 文件。它们是混合的文本和数值,并且具有可变数量的列和行。我感兴趣的文件部分有固定数量的列,但没有行。我可以使用 header 参数跳过第一部分,但底部还有我不需要的单元格。它的外观示例:

DATA,1,0,3,3960.4,3236,3373,-132
DATA,1,0,4,4544.5,3530,3588,-76
RANDOM TEXT,0
INFO,1,0,#+BHO0 _:WRF&-11,S%00-0-03-1       
INFO,2,1,#*BHO0 _8WRF&-11,NAS%00-0-15-1

我只对以 DATA 开头的行感兴趣。如果我尝试在不删除以下行的情况下运行 csvRead,我会收到此错误:

Warning: Inconsistency found in the columns. At line 4993, found 2 columns 
while the previous had 8.

我目前有一个程序可以读取文件并根据需要对其进行操作,但我必须进入每个文件并删除底部的行。有没有办法解决这个问题?

我当前的程序如下所示:

D = uigetfile([".csv"],"path", "Choose a file name", %t);
filename = fullfile(D);
sub = ["DATA" "0"];

//Import data
data = csvRead(filename, ',', [], 'string', sub, [], [], 34);
edit(filename)
//determine # of rows
data_size = size(data);
limit = data_size(1);

有什么想法吗?

【问题讨论】:

    标签: scilab


    【解决方案1】:

    不可能指定csvRead 应该忽略列较少的行,或者使用默认集或任何东西(这会很好)。 解决方法可能是您的情况,仅解析以DATA 开头的行。这可以通过Regular Expressions 来完成。

    csvReadregexpcomments 参数提供了忽略 csv 文件中与某个正则表达式匹配的行的机会。除此之外,还可以编写一个正则表达式来匹配所有匹配某个模式的字符串:

    /^(?:(?!PATTERN).)*$/;    # Matches strings not containing PATTERN
    

    在您的情况下应用此正则表达式,将导致所有 not 包含 PATTERN 的行都被假定为 cmets,因此将被忽略。

    在代码中表示类似以下内容。

    filename = fullfile('data.csv');
    sub = ["DATA" "0"];
    
    //Import data
    number_of_header_lines = 1
    read_only_lines_starting_with = 'DATA'
    regexp_magic = '/^(?:(?!' + read_only_lines_starting_with + ').)*$/'
    
    data = csvRead(filename, ',', [], 'string', sub, regexp_magic, [], number_of_header_lines);
    
    disp(data)
    

    【讨论】:

    • 谢谢!完美运行!
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多