CSV records

11 отговора 343 прегледа
#1

CSV records

Здравейте,

Имам CSV файл със записи като този:

"1142293400";"1142293407";"US";"United States";"TEXAS";"Plano";"Wireless Warehouse USA"

Първите 2 стойности са IP адреси (начало и край на range)

Как мога да обиколя целият файл и да добавя отговарящите IP адреси (на първите 2 стойности за всеки ред) в началото за да има вид:

...
"68.22.3.152";"68.22.3.159";"1142293400";"1142293407";"US";"United States";"TEXAS";"Plano";"Wireless Warehouse USA"
...

Предполагам че ще се обикаля с for и long2ip() но не мога да го измисля

Ще се радвам да получа реални, работещи примери.

Благодаря!!

Отговор
в отговор на genome #2

Re: CSV records

А за какъв точно чеп ти е това? Работи с ИП-тата като с двордове, няма да те ухапят. Като дойде време да показваш нещо на юзъра, тогава лонг2ип().

Портал за почитателите на Толкин - връзки и новини
[линк]
Отговор
в отговор на Mopдpeд #3

Re: CSV records

Сигурен бях че ще има и поне едно такова мнение, няма как.
Не ми давай излишен акъл приятелю - ако имаш да кажеш нещо полезно - давай.
Иначе - мутирай (mute).

Отговор
в отговор на genome #4

Re: CSV records

Незнам дали затова питаш ... все пак :

$handle = fopen("myfile", "r");

$output='';
while (!feof($handle)) {
$buffer = fgets($handle);
$buffer_arr = explode(';',$buffer);
$ip_1 = str_replace('"','',$buffer_arr[0]);
$ip_1 = long2ip($ip_1);
$ip_2 = str_replace('"','',$buffer_arr[1]);
$ip_2 = long2ip($ip_2);

$output.='"'.$ip_1.'";"'.$ip_2.'";'.$buffer;
}

echo $output;

Отговор
в отговор на genome #5

Re: CSV records

В отговор на:

Предполагам че ще се обикаля с for и long2ip() но не мога да го измисля




ми ти си го измислил, остава да го напишеш.

Пък като се замислих, най-лесно ще стане с една ЦКЛ таблица с една заявка за импорт, езна ъпдейт и една експорт. Още един вариант, но не съм сигурен, е да ползваш ДБА с конективити към ЦСВ и да оперираш този файл все едно ти е ЦКЛ таблица.

Отговор
в отговор на genome #6

Re: CSV records

Не се обиждай, ама не мисля, че ти е излишен акъл за задачата. Както знаеш проблемите имат по много решения и понякога те са принципно различни и човек трябва да може да преценява в кой случай кое решение е добре да приложи и защо.

Съдейки по това какво те е спряло тук е видно, че ти липсва опит. Това не е лошо, не ме разбирай погрешно, но според мен е наивно да отхвърляш съвет, когато ти липсва опит да прецениш добър ли е или не - точно затова те питам защо искаш да направиш това, за да се замислиш дали въобще ти трябва.

Мога да ти дам няколко аргумента защо това, дето си се засилил да го правиш е не само ненужно, но и неефективно - и понеже приемам, че има малка вероятност аз да не съм разбрал правилно какво целиш и да не съм се сетил за случая, в който НАИСТИНА ти трябва да пазиш ип-тата в човешки вид, ще си замълча докато не кажеш какво целиш.

Само не забравяй, че като работиш с толкова големи данни, трябва да целиш не просто решения, които работят, а решения, които работят ефективно. Например - използваш ли foreach в скрипта, с който четеш този файл? Ако използваш - махни го :) Всъщност, тикай в база данни както казва Вълка, те със сигурност ще са по-ефективни от всичко, което напишеш да работи с .цвс файл (най-малкото техните данни ще се кешират в паметта по-ефективно ако ги използваш често)

Портал за почитателите на Толкин - връзки и новини
[линк]
Отговор
в отговор на Mopдpeд #7

Re: CSV records

само не разбрах що се хабиш, след като човека черно на бяло си е написал "не ми обяснявай как, ми седни да ми го напишеш, щото ме мързи да се занимавам с глупости"...

Just a genius

Отговор
в отговор на Bълk #8

Re: CSV records

Всъщност може да се напише изцяло на SQL, аз един път го правих точно същото. Предполагам че пича е взел базата на country2database или geoip или което и да е там ....
Целия SQL скрипт беше create table .... load data from file ..... update novite_ip s inet_ntoa само експорта не го правих че ми трябваше базата за справки ;-)

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #9

Re: CSV records

Цялото нещо е вече готово. Това коео беше CSV е импортнато в SQL (LOAD).
Не става въпрос за базата на GEOIP (xex..), а за друга много по-голяма база (тази на GEOIP е околo 70 000 записа):

Тази изглежда така (ip -> държава -> град -> провайдър)

"9.0.0.0";"9.255.255.255";"0150994944";"0167772159";"US";"United States";"NEW YORK";"White Plains";"IBM Corporation"

[root@phonebooth.pts/9 IPS]# wc -l db-final.csv
383576 db-final.csv

Цялото конвертиране от long към ip изобщо не беше толкова лесно - трябваше да се съобрази че long-овете, които почват с 0 (около 80 000) не могат да бъдат обработени от long2ip, а имаше и такива които почват с 2 нули.

Оправих се и с това, тези които се обадиха с намерние да помогнат - благодаря. Тези, които писаха глупостите си не ме интересуват.

Отговор
в отговор на genome #10

Re: CSV records

те всички се опитаха да ти помогнат ама...

Отговор
в отговор на ro6avia #11

Re: CSV records

е, то все пак не се знае какво му трябва на човека, я ЦКЛ я ЦСВ , усерската му работа.

Абе що ме гони нещото, че е имало един модул в ПХП за работа с ЦСВ и те се връзваха все едно като ЦКЛ и можело да изпълняваш някакви елементарни заявки с това нещо. Ама вчера се разрових из РФМ и не го набарах това чудо.

Отговор
в отговор на genome #12

Re: CSV records

В отговор на:

трябваше да се съобрази че long-овете, които почват с 0 (около 80 000) не могат да бъдат обработени от long2ip




сплит -> каст -> джойн

Отговор