带有不规则空格和制表符的文件按列分割/爆炸

所以我有一个非常旧的文件,包含数千行(我猜是手工生成)而我正在尝试 将它们移动到rdb中,但这些行没有格式/模式来转换为列。 比如说文件中的行如下所示:</ p>

  blah blahsdfas laslkdlasdj aksdjla 
sldks slslsl lsdlksldj lsdjlfslk
</ code> </ pre>

当我看到它时,我可以说它有四个字段,主要是尝试使用awk但是没有按预期打印列,因为列之间的空间不是制表符或空格数相等。</ p>

你们认为有可能提取? 如果是,有人可以帮助PHP片段吗?</ p>
</ div>

展开原文

原文

So I have a very old file with thousands of lines (I guess generated by hand) and I'm trying to move them into a rdb, but the lines don't have a format/pattern to convert into columns. Say for example the lines in the file looks like:

blah   blahsdfas    laslkdlasdj      aksdjla
sldks  slslsl      lsdlksldj           lsdjlfslk

I could say it has four fields when I look at it, primarily tried using awk but it wasn't printing the column as expected because the space between a column is not tab or with an equal space count.

You guys think its possible to extract? If yes can someone help with a php snippet?

2个回答



使用 preg_split() </ code> ,您可以使用一个或多个空白字符作为分隔符来排除这一行:</ p>

  $ lines = file('filename',FILE_IGNORE_NEW_LINES |  FILE_SKIP_EMPTY_LINES); 
foreach($ lines as $ line)
{
$ pieces = preg_split('/ \ s + /',$ line);
//用片段做某事
}
</ code> </ pre>
</ div>

展开原文

原文

Using preg_split(), you can break the line up using one or more whitespace characters as the delimiters:

$lines = file('filename', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
foreach($lines as $line)
{
    $pieces = preg_split('/\s+/', $line);
    // do something with pieces
}

dongshangan2074
dongshangan2074 酷也会尝试这个,荣誉,你们这些人的速度非常快!
8 年多之前 回复
dtds8802
dtds8802 这就是我要编写的内容,我建议使用\ s \ s +作为分割多个空格的模式,以防字符串实际上有一个所需的空间。
8 年多之前 回复



看起来像 preg_split('/ \ s {2,} /',$ line)</ code>会分裂 除此之外。 那就是分成两个或更多的空白字符。</ p>

如果这是手工维护的,你可能需要进行手动清理(例如,可能有人输入两个空格但不打算 开始下一栏)。 幸运的是,只需几千行,手动清理是乏味的,而不是不可能的。</ p>
</ div>

展开原文

原文

It looks like preg_split('/\s{2,}/', $line) would split this apart. That'd split on two or more whitespace characters.

If this has been maintained by hand, you may have to do manual cleanup (e.g., maybe someone typed two spaces but didn't intend to start the next column). At only thousands of lines, manual cleanup is thankfully on tedious, not impossible.

duanjinchi1982
duanjinchi1982 完全是计划!
8 年多之前 回复
duanbi3151
duanbi3151 很高兴听到它有所帮助。 如果您可以对失败的20%进行分类,您可以编写更多规则来捕获这些情况,然后重复。 最终你得到足够的失败,你只需要手动清理它们。
8 年多之前 回复
dragon4808
dragon4808 感谢一堆@derobert,只是应用到我的文件块,几乎80%被清理:)
8 年多之前 回复
doujishao8793
doujishao8793 感谢@derobert的快速回复,将检查出来..是的,文件是一个大混乱..只是讨厌甚至想到手动清理成千上万行。
8 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问