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