Tricky dosyası ayrıştırma.

5 Cevap php

Ben şu formatta bir dosyayı ayrıştırmak gerekiyor.

0000000 ...ISBN.. ..Author.. ..Title.. ..Edit.. ..Year.. ..Pub.. ..Comments.. NrtlExt Nrtl Next Navg NQoH UrtlExt Urtl Uext Uavg UQoH ABS NEB MBS FOL 
ABE0001 0-679-73378-7 ABE WOMAN IN THE DUNES (INT'L ED) 1st 64 RANDOM 0.00 13.90 0.00 10.43 0 21.00 10.50 6.44 3.22 2 2.00 0.50 2.00 2.00 ABS 

Kimlik ve ISBN bir sorun değildir, başlık. Bu alanlar için bir dizi uzunluğu yoktur ve hiçbir katı ayraçlar-uzay dosyası çoğu için kullanılabilir vardır.

Bir diğer konu yorum alanında bir giriş her zaman yok olmasıdır. Olduğunda, içerik içinde aralıklı bulunmaktadır.

Bu yüzden ilk iki almak ve son ondört olabilir. Bazı yardım orta altı alanlarını ayrıştırmak için nasıl sergiyi gerekir.

Bu dosya ben değiştiremem eski bir program tarafından oluşturulmuş. Ben bu dosyayı ayrıştırmak için php kullanıyorum.

5 Cevap

Ben de 'bu olmak zorunda mı nasıl iyi' kendime isteyeceğini ve 'Kaç kayıtları'?

Eğer, örneğin, bir web sitesinde satmak için kitap bir katalog koymak için bu listeyi ayrıştırma - muhtemelen mümkün olduğunca iyi olmak istiyorum, ama bazı başlıkları özledim ve böylece kullanıcıların geri besleme mekanizması inşa edeceğini bekliyoruz Eğer sorunu gidermek (ve kolay size yeni formatta bunu düzeltmek için yapmak) yardımcı olabilir.

Kesinlikle her yanlış ayrıştırmak için para çok gevşek olacak ve sadece birkaç bin kitap vardır, çünkü doğru almak zorunda Öte yandan, size yakın alma planı ve daha sonra bütünün bir insan inceleme yaparak gerekir dosya.

(Benim ilk iş olarak, 150 kayıtları dönüştürmek için bir veri dönüşüm proje üzerinde altı hafta geçirmek - zamanı değil iyi bir kullanım).

(Bazı on-line veritabanı) ISBN kitabın başlığı ve yayıncı bulun ve sadece kalanını ayrıştırmak :)

BTW. uzay aslında bir boşluk gibi ne görünüyor emin misin? (Non-break boşluk gibi) daha "görünmez" karakter vardır. Ben, iyi bir fikir değil biliyorum, ama görünüşe göre bu biçime yazarı oldukça yaratıcı ...

Sen elle size verileri analiz ve benzeri hangi yıl, baskı ve yayıncı bakmak bulmak gerekir. Bu yıl her zaman iki basamaklı ve yayıncı zaman bazı sınırlı listeden geliyor bulmak Örneğin, bu sizinle başlayabilirsiniz şeydir.

Ben başka bir yol göremiyorum süre sonra biraz tahmin Böyle bir şey hakkında o gitmek istiyorum:

Ben güvenilir ayrıştırmak biliyorum ne pullanmak istiyorum. Size bırakarak ABE WOMAN IN THE DUNES (INT'L ED) 1st 64 RANDOM

Oradan Edition'ı bulmak denemek istiyorum ve ABE WOMAN IN THE DUNES (INT'L ED) & depolama ve size bırakarak Edition'ı çıkardıktan sonra bu konumda ikiye dize bölmek 64 RANDOM, başka bir seçenek yıl denemek için ama tabii ki böyle 1984 gibi başlıklar bir sorun mevcut olabilir. (Baskı Tahmin o 7th, tüm sürümleri için 51 vb varsayarak tabii ki).

Sonunda ikinci dizenin başında ben yıl 64 biraz güvenilir tahmin edebileceği kabul ediyorum ve daha fazla Publisher (/ Comment) bölüm sınırlamak.

Eğer ben adlarında boşluk olan alanlarda değil aynı zamanda yayıncılar sadece bir yorum yok varsaymak istiyorum gibi karşı maç yere yazarlar / yayımcılar listesi var sürece gerisi saf tahmine. Ama en azından aşağı bir ve Publisher Yazar / Başlık içeren 2 dizeleri (/ Yorumlar) diğer olmalıdır.

Tüm bu elle parçayı biraz sınırlamanız gerekir.

Bir kez ben de bu yüzden onu yine ayrıştırma hakkında gitmek zorunda değilsiniz yerde daha iyi bir formatta kaydetmek istiyorum bitti ;)

Pcre motor seçimi içinde birden fazla grup izin veriyorsa, bu nedenle, bilmiyorum:

([A-Z0-1]{7})\ (\d-\d{3}-\d{5}-\d)\ (.+)\ (\d(?:st|nd|rd))\ \d{2}\ ([^\d.]+)\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d{1})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d)\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\d+.\d{2})\ (\w{3})

It does look quite ugly and doesn't fix your author-title problem but it matches quite good for the rest of it. Concerning your problem I don't see any solution but having a lookup table for authors or using other services to lookup title and author via the ISBN.

Thats if unlike in your example above the authors are not just represented by their first name. Also double check all exception that might occur with the above regex as titles may contain 1st or alike.