Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式作为分隔符来分隔不受限制的文本表_Regex_Excel_Vba - Fatal编程技术网

Regex 使用正则表达式作为分隔符来分隔不受限制的文本表

Regex 使用正则表达式作为分隔符来分隔不受限制的文本表,regex,excel,vba,Regex,Excel,Vba,请允许我首先说我不是程序员,这是我的第一个问题。因此,如果我没有遵循典型的礼仪,我会提前道歉 我正在处理一个VBA电子表格,在这里我需要读取一个文本文件并导入一个类似于下图的数据表。该表需要拆分为列(下表中有18列)并存储到数组中。我正在使用vba分割函数。但是,我的问题是我找不到可以用作split函数分隔符的正则表达式 我的数据文本表 Layer Depth Unit Damping Shear Max Max Shear

请允许我首先说我不是程序员,这是我的第一个问题。因此,如果我没有遵循典型的礼仪,我会提前道歉

我正在处理一个VBA电子表格,在这里我需要读取一个文本文件并导入一个类似于下图的数据表。该表需要拆分为列(下表中有18列)并存储到数组中。我正在使用vba分割函数。但是,我的问题是我找不到可以用作split函数分隔符的正则表达式

我的数据文本表

 Layer   Depth     Unit    Damping    Shear      Max       Max      Shear       Depth      Max       G/Gmax        Damping       Motion         Depth     Input     Gmax         Average              CSR
                  Weight             Modulus    Strain    Stress   Wave Vel.   Max Acc     Acc       Curve          Curve         Type                     Vs                      PGA
          (m)    (kN/m^3)    (%)     (kN/m^2)    (%)     (kN/m^2)   (m/s)        (m)       (g)                                                  (m)       (m/s)   (kN/m^2)         (g)
  1       .749   18.8518         5  32682.88    .01486     4.856    130.3899         0    .35182  EPRI 0-20'    EPRI 0-20'       Outcrop         .749    149.99     43092         .34368             .223392
  2      2.749   14.9244       7.6  11773.69    .13396    15.771    87.95655     1.499    .34895  Peat          Peat             Within         2.749    111.98     19152       .3362193            .2185425
  3      5.749   16.4953      12.6  14589.03     .2003    29.225    93.13082     3.999      .309  Clay PI=20    Soil PI=15       Within         5.749    134.99   30643.2       .3095427            .2816547
  4      8.999   16.9666      12.5  21215.63    .19831    42.076    110.7365     7.499    .24429  Clay PI=20    Soil PI=15       Within         8.999    159.99  44336.88       .2829335              .30431
  5     11.499   18.5376      20.7   6717.56    .70629    47.431    59.61278    10.499    .20776  EPRI 21-50'   EPRI 21-50'      Within        11.499    164.99  51566.76       .2461606            .2820004
  6     13.499   16.9666      15.3  13023.36    .39452    51.386    86.76098    12.499    .23157  Clay PI=20    Soil PI=15       Within        13.499    149.99  38974.32       .2252097            .2667809
  7     16.999   19.0089       9.2  46419.66    .11855    55.032    154.7508    14.499    .23462  EPRI 51-120'  EPRI 51-120'     Within        16.999       220  93653.28       .1880533            .2302633
  8     21.999   19.0089      10.3  44873.13    .15853    71.136    152.1511    19.499    .21577  EPRI 51-120'  EPRI 51-120'     Within        21.999       230  102367.5       .1834982            .2296537
  9     26.999   19.0089      10.4  52672.79    .16092     84.76    164.8447    24.499    .21795  EPRI 51-120'  EPRI 51-120'     Within        26.999       250  120944.9       .1755987            .2227533
 10     32.249   19.0089       7.3  87558.16    .10769    94.289    212.5349    29.499    .20249  EPRI 121-250  EPRI 121-250     Within        32.249    279.99  151683.8       .1618781            .2073164
 11     38.999   19.0089       6.5  122831.4    .08732   107.252    251.7309    34.999    .20402  EPRI 121-250  EPRI 121-250     Within        38.999    319.98  198127.4       .1508976            .1948832
 12     46.998   19.0089         5  218390.3    .05743   125.428    335.6591    42.998     .1869  EPRI 121-250  EPRI 121-250     Within        46.998    399.99  309592.1       .1453711             .189016
 13     55.498   19.0089       4.5  287538.6    .04995   143.637      385.15    50.998    .17472  EPRI 121-250  EPRI 121-250     Within        55.498    450.01  391849.9         .14022            .1832357
 14       Base                                                                  59.998      .166                                 Within
 14    Outcrop                                                                  59.998    .23986                                 Outcrop

看起来您拥有的数据是固定宽度的。在文本导入过程中,可以使用固定宽度。首先,选择“固定宽度”而不是“分隔宽度”

第二个屏幕允许您根据每列的宽度设置断点

要在VBA中实现这一点,我建议在


您可以在
FieldSpecs
paramater

中设置看起来像固定宽度文件的每一列的宽度,以便更容易使用“数据>>从文本”选项,选择“固定宽度”设置并调整列以匹配数据。编辑预览:尼克说的话。如果您喜欢使用VBA,则可以逐行读取文件,并根据字段边界拆分每一行。必须使用VBA完成此过程,因为使用VBA代码完成进一步的分析,导入表并手动拆分需要很长时间。在VBA中不使用regex也可以执行类似的操作,因为知道字段宽度。@alkustaban我已经更新了答案,在VBA中加入了另一种方法。
Function ImportFixedWidth(FileName As String, _
    StartCell As Range, _
    IgnoreBlankLines As Boolean, _
    SkipLinesBeginningWith As String, _
    ByVal FieldSpecs As String) As Long