2011-12-29 24 views
6

Tôi đang cố gắng giúp bố tôi - anh ấy đã cho tôi xuất từ ​​một ứng dụng lập kế hoạch tại nơi làm việc của mình. Chúng tôi đang cố gắng để xem liệu chúng ta có thể nhập nó vào một cơ sở dữ liệu mysql để anh/đồng nghiệp có thể cộng tác trực tuyến với nó.Phân tích cú pháp một tệp phân cách không gian rất bận rộn

Tôi đã thử một số phương pháp khác nhau nhưng dường như không có cách nào hoạt động đúng - và đây không phải là lĩnh vực chuyên môn của tôi.

xuất khẩu có thể được nhìn thấy ở đây: http://roikingon.com/export.txt

Bất kỳ sự giúp đỡ/lời khuyên về làm thế nào để đi về phân tích này sẽ được đánh giá rất nhiều!

Cảm ơn !!

+0

Lời khuyên ... tốt, bạn nên biết định dạng dữ liệu của lần xuất đó. Ngoài ra, địa chỉ được phân cách bằng dấu cách và không có tab giữa các cột - có vẻ như thiếu một số thông tin để phân tích cú pháp tự động. – alxx

+2

Đoán của tôi: chiều rộng cố định và 3 ký tự đầu tiên là loại bản ghi. Mỗi loại bản ghi có cùng định dạng (nghĩa là mọi dòng có loại bản ghi 4 có cùng hai cột, loại bản ghi 17.1 chỉ có một cột nhưng có vẻ như bắt đầu một "khối tuyến đường" mới). – vstm

+2

biểu mẫu kém để không bao gồm nội tuyến dữ liệu của bạn. Bây giờ liên kết đã chết, vì vậy không thể ngữ cảnh hóa câu hỏi của bạn. Hoặc sử dụng pastebin et al ... chỉ cần nói .. – ftrotter

Trả lời

2

Tôi đã cố gắng viết một trình phân tích cú pháp cố định (có phần động). Hãy xem: http://codepad.org/oAiKD0e7 (quá dài đối với SO, nhưng chủ yếu chỉ là "dữ liệu").

Những gì tôi đã nhận thấy

  • Text-Dữ liệu được còn liên kết với lớp đệm ở bên phải như "hello___" (_ = không gian)
  • dữ liệu bằng số như vậy là hợp phù hợp với đệm ở bên trái "___42"

Nếu bạn muốn sử dụng mã của tôi, bạn cần phải thực hiện:

  • Các loại bản ghi 12.x có số cột biến (sau một số cột tĩnh), bạn phải thực hiện một "trình xử lý" khác cho nó
  • Một số chiều rộng của tôi có lẽ là sai nhất. Tôi nghĩ rằng có một hệ thống (giống như các số có độ dài 4 ký tự và văn bản dài 8 ký tự, với một số biến thể cho các trường hợp đặc biệt). Ai đó có kiến ​​thức về miền và nhiều hơn một tệp mẫu có thể tìm ra các cột.
  • Lấy dữ liệu thô chỉ là bước đầu tiên, bạn phải ánh xạ dữ liệu thô đến một số mô hình hữu ích và viết mô hình đó vào cơ sở dữ liệu.
+0

Ha! Tôi đang thực sự làm điều tương tự. Tôi đã làm nó hơi tho khác nhau. Tôi đã sử dụng một công tắc thay vì sau đó một mảng lớn với một hàm trả về một mảng dữ liệu trên mỗi dòng. những thứ tuyệt vời! – Roi

1

bạn có thể sử dụng chia nhỏ với cụm từ thông dụng (không hoặc nhiều khoảng trắng).

Tôi sẽ cố gắng và cho bạn biết.

Có vẻ như không phải là cấu trúc với dữ liệu của bạn.

$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] => 
) 

Hãy thử dòng này bằng 0 hoặc nhiều khoảng trắng hơn, khi đó bạn sẽ có một mảng đẹp, bạn có thể xử lý. Nhưng nhìn vào dữ liệu của bạn, không có cấu trúc, vì vậy bạn sẽ phải biết phần tử mảng nào tương ứng với dữ liệu nào.

Chúc may mắn.

+0

Hey - đây là suy nghĩ đầu tiên của tôi .. Và bắt đầu thực hiện nhưng sau đó nhận ra điều này được coi là "cột phân tách" có nghĩa là có thể có hồ sơ null và làm điều này sẽ bỏ qua những bản ghi đó. Tôi tìm thấy một PDF mà phần nào giải thích những gì đang diễn ra và trong đó ... nó bao gồm một độ dài trường.sử dụng độ dài trường đó tôi có thể sử dụng chất nền ($ row, $ column-position, $ field-length) – Roi

+0

như tôi đã nói chúc may mắn. rất khó phân tích dữ liệu này. – DarthVader

1

Mở tệp bằng excel và lưu dưới dạng được phân tách bằng dấu phẩy. Đối xử với các dấu phân cách liên tiếp là một hoặc không. Sau đó, resave nó với excel như là một csv, mà sẽ được phân tách bằng dấu phẩy và dễ dàng hơn để nhập khẩu vào mysql.

EDIT: Người đã nói sử dụng preg_split trên "[+]" đang cung cấp cho bạn về cơ bản câu trả lời giống như tôi vừa làm ở trên.

Câu hỏi là phải làm gì sau đó, sau đó.

Bạn đã xác định có bao nhiêu "loại hàng" có? Một khi bạn đã xác định được điều đó và xác định các đặc tính của chúng, sẽ dễ dàng hơn khi viết một số mã để đi qua nó.

Nếu bạn lưu nó trong csv, bạn có thể sử dụng chức năng fgetcsv PHP và các chức năng liên quan. Đối với mỗi hàng, bạn sẽ kiểm tra loại của nó và thực hiện các hoạt động tùy thuộc vào loại.

Tôi nhận thấy rằng các hàng dữ liệu của bạn có thể được chia cho dù dữ liệu của cột đầu tiên có chứa "." đây là ví dụ về cách bạn có thể lặp qua tệp.

while ($ row = fgetcsv ($ file_handle)) { if (strpos ($ row [0], '') === false) {// do something } else {// làm cái gì khác } }

"làm điều gì đó" sẽ là một cái gì đó như "CREATE TABLE table_$row[0]" hoặc "INSERT INTO table" vv

Ok, và đây là một số quan sát hơn:

tập tin của bạn là r thực sự giống như nhiều tập tin dán lại với nhau. Nó chứa nhiều định dạng.Lưu ý rằng tất cả các hàng bắt đầu bằng "4" tiếp theo có chữ viết tắt của 4 chữ cái theo sau là tên công ty đầy đủ. Một trong số đó là "caco". Nếu bạn tìm kiếm "caco", bạn tìm thấy nó trong nhiều "bảng" trong tệp.

Tôi cũng nhận thấy "smuwtfa" (các ngày trong tuần) rắc xung quanh.

Sử dụng các đầu mối như thế để xác định logic về cách xử lý từng hàng.

+1

Nếu bạn xem xét kỹ hơn tệp, bạn sẽ thấy rằng đây không phải là vấn đề đơn giản khi chuyển đổi sang CSV. Dữ liệu chứa trong đó phức tạp hơn nhiều. Nó sẽ/sẽ yêu cầu kỹ thuật đảo ngược, phân tích cú pháp và sau đó nhập vào một số bảng khác nhau. –

+0

Thật khó để biết được cấu trúc dữ liệu là gì. Nó sẽ hữu ích hơn nếu bạn thực sự đăng một bản tóm tắt về những cấu trúc bạn cần giải mã. –

+0

Tôi dường như đã có thể làm điều này bằng cách sử dụng chất nền và sau một định dạng cho mỗi phần – Roi

2

Với cấu trúc tệp đó, về cơ bản bạn cần kỹ thuật đảo ngược một định dạng độc quyền. Có, đó là không gian phân định nhưng định dạng không tuân theo bất kỳ loại tiêu chuẩn như CSV, YAML vv Nó hoàn toàn độc quyền với những gì có vẻ là một tiêu đề và phần riêng biệt với các tiêu đề của riêng mình.

Tôi nghĩ rằng đặt cược tốt nhất của bạn là thử và xem có một số loại xuất khác có thể được thực hiện như Excel hay XML và làm việc từ đó không. Nếu không có sau đó xem nếu có một đầu ra html của một số loại có thể được sàng lọc màn hình, và dán vào Excel và nhìn thấy những gì bạn nhận được.

Do mọi thứ tôi đã đề cập ở trên, sẽ rất khó để xoa bóp tệp ở dạng hiện tại của nó thành một thứ có thể được nhập vào cơ sở dữ liệu một cách hợp lý. (Lưu ý rằng từ cấu trúc tệp cần có một số bảng.)

Các vấn đề liên quan