我試圖幫助我的父親 - 他給了我一個從他的工作調度應用程序出口。我們正試圖查看我們是否可以將其導入到mysql數據庫中,以便他/他們的同事可以在線進行協作。解析一個非常忙碌的空間分隔文件
我已經嘗試了很多不同的方法,但沒有一個看起來沒有問題 - 這不是我的專業領域。
出口可以在這裏看到:http://roikingon.com/export.txt
上如何去分析這個任何幫助/建議將不勝感激!
謝謝!
我試圖幫助我的父親 - 他給了我一個從他的工作調度應用程序出口。我們正試圖查看我們是否可以將其導入到mysql數據庫中,以便他/他們的同事可以在線進行協作。解析一個非常忙碌的空間分隔文件
我已經嘗試了很多不同的方法,但沒有一個看起來沒有問題 - 這不是我的專業領域。
出口可以在這裏看到:http://roikingon.com/export.txt
上如何去分析這個任何幫助/建議將不勝感激!
謝謝!
我試圖編寫一個(有些動態的)固定列解析器。看看:http://codepad.org/oAiKD0e7(它太長了,但它主要是「數據」)。
我已經注意到
"hello___"
(_
=空間)"___42"
如果你想使用我的代碼還有些事情要做:
Ha!我其實是在做同樣的事情。我做了一點不同的壽。我使用了一個開關,而不是一個具有返回每行數據數組的函數的大型數組。 好東西! – Roi 2011-12-30 02:57:29
您可以使用正則表達式(零個或多個空格)進行拆分。
我會盡力讓你知道。
似乎沒有與您的數據結構。
$data = "12.1 0 1144713 751 17 Y 8 517 526 537 542 550 556 561 567 17 ";
$arr = preg_split("/ +/", $data);
print_r($arr);
Array
(
[0] => 12.1
[1] => 0
[2] => 1144713
[3] => 751
[4] => 17
[5] => Y
[6] => 8
[7] => 517
[8] => 526
[9] => 537
[10] => 542
[11] => 550
[12] => 556
[13] => 561
[14] => 567
[15] => 17
[16] =>
)
試試這個preg_split("/ +/", $data);
這是零個或多個空格分割線,那麼你將有一個很好的數組,你可以處理。但是看看你的數據,沒有結構,所以你將不得不知道哪個數組元素對應於什麼數據。
祝你好運。
嘿 - 這是我的第一個想法..並開始實施,但後來意識到這被認爲是「列分隔」,這意味着可能會有空記錄,這樣做會跳過那些記錄。我找到了一個PDF,有點解釋了發生了什麼,並在其中......它包括一個字段長度。使用該字段的長度,我可以使用substr($ row,$ column-position,$ field-length) – Roi 2011-12-29 07:41:20
就像我說的祝你好運。解析這種有用的數據非常困難。 – DarthVader 2011-12-29 08:12:19
用excel打開並保存爲逗號分隔。將連續的分隔符視爲一個,否則。然後使用excel作爲csv重新保存,這將以逗號分隔,並且更容易導入到mysql。
編輯: 誰說在[+]上使用preg_split的人給出的答案基本上與我上面做的一樣。
問題是在那之後要做什麼。
您是否確定了有多少「行類型」?一旦確定並定義了它們的特徵,編寫一些代碼來完成它會容易得多。
如果將其保存爲csv,則可以使用PHP fgetcsv函數和相關函數。對於每一行,您都會檢查它的類型並根據類型執行操作。
我注意到您的數據行可能可以分爲第一列的數據是否包含「。」。所以這裏有一個如何循環訪問文件的例子。
而($行= fgetcsv($ file_handle)){ 如果(strpos($行[0], '')===假){// 做一些 }其他{// 做別的 } }
「做什麼」 會是這樣的 「CREATE TABLE table_$row[0]
」 或 「INSERT INTO table
」 等
好了,和這裏的一些觀察:
您的文件[R最終像多個文件粘在一起。它包含多種格式。請注意,所有以「4」開頭的行都有一個由4個字母組成的公司縮寫,後面是完整的公司名稱。其中之一是「caco」。如果您搜索「caco」,則可以在文件中的多個「表格」中找到它。
我也注意到「smuwtfa」(星期幾)灑在身邊。
使用這樣的線索來確定如何處理每一行的邏輯。
如果仔細查看該文件,您會發現這不是轉換爲CSV的簡單方法。其中包含的數據比這要複雜得多。它會/將需要反向工程,解析並導入到許多不同的表中。 – 2011-12-29 05:37:08
甚至很難說出數據結構是什麼。如果您實際發佈了需要解碼的結構的摘要,那將會更有用。 – 2011-12-29 06:56:39
我似乎已經能夠使用substr做到這一點,並按照每個部分的格式 – Roi 2011-12-29 07:46:21
使用該文件結構,您基本上需要對專有格式進行反向工程。是的,這是空格分隔,但格式不符合任何類型的標準,如CSV,YAML等。它是完全專有似乎是一個標題和獨立的部分與他們自己的標題。
我認爲你最好的選擇是嘗試看看是否有其他類型的導出可以完成,例如Excel或XML並從那裏開始工作。如果沒有,那麼看看是否有某種可以屏幕抓取的html輸出,並粘貼到Excel中並看到你得到了什麼。
由於我上面提到的所有內容,按照當前形式的文件很難將其按照合理的方式導入到數據庫中。 (請注意,從文件結構中需要多個表格。)
建議......好的,你應該知道該輸出的數據格式。此外,地址是空格分隔的,列之間沒有標籤 - 它似乎缺少一些自動解析的信息。 – alxx 2011-12-29 05:29:58
我的猜測是:它的寬度是固定的,前3個字符是記錄類型。每種記錄類型都有相同的格式(這意味着記錄類型4的每一行都有相同的兩列,記錄類型17.1只有一列,但它似乎開始一個新的「路由塊」)。 – vstm 2011-12-29 05:34:20
糟糕的表單不包括你的數據內聯。現在鏈接已經死了,所以不可能將你的問題置於背景之中。或者使用pastebin等...只是說... – ftrotter 2014-06-14 00:55:03