CSV records
11 отговора
343 прегледа
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() но не мога да го измисля
Ще се радвам да получа реални, работещи примери.
Благодаря!!
Имам 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() но не мога да го измисля
Ще се радвам да получа реални, работещи примери.
Благодаря!!
Re: CSV records
А за какъв точно чеп ти е това? Работи с ИП-тата като с двордове, няма да те ухапят. Като дойде време да показваш нещо на юзъра, тогава лонг2ип().
Портал за почитателите на Толкин - връзки и новини
[линк]
Портал за почитателите на Толкин - връзки и новини
[линк]
Re: CSV records
Сигурен бях че ще има и поне едно такова мнение, няма как.
Не ми давай излишен акъл приятелю - ако имаш да кажеш нещо полезно - давай.
Иначе - мутирай (mute).
Не ми давай излишен акъл приятелю - ако имаш да кажеш нещо полезно - давай.
Иначе - мутирай (mute).
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;
$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;
Re: CSV records
В отговор на:Предполагам че ще се обикаля с for и long2ip() но не мога да го измисля
ми ти си го измислил, остава да го напишеш.
Пък като се замислих, най-лесно ще стане с една ЦКЛ таблица с една заявка за импорт, езна ъпдейт и една експорт. Още един вариант, но не съм сигурен, е да ползваш ДБА с конективити към ЦСВ и да оперираш този файл все едно ти е ЦКЛ таблица.
Re: CSV records
Не се обиждай, ама не мисля, че ти е излишен акъл за задачата. Както знаеш проблемите имат по много решения и понякога те са принципно различни и човек трябва да може да преценява в кой случай кое решение е добре да приложи и защо.
Съдейки по това какво те е спряло тук е видно, че ти липсва опит. Това не е лошо, не ме разбирай погрешно, но според мен е наивно да отхвърляш съвет, когато ти липсва опит да прецениш добър ли е или не - точно затова те питам защо искаш да направиш това, за да се замислиш дали въобще ти трябва.
Мога да ти дам няколко аргумента защо това, дето си се засилил да го правиш е не само ненужно, но и неефективно - и понеже приемам, че има малка вероятност аз да не съм разбрал правилно какво целиш и да не съм се сетил за случая, в който НАИСТИНА ти трябва да пазиш ип-тата в човешки вид, ще си замълча докато не кажеш какво целиш.
Само не забравяй, че като работиш с толкова големи данни, трябва да целиш не просто решения, които работят, а решения, които работят ефективно. Например - използваш ли foreach в скрипта, с който четеш този файл? Ако използваш - махни го :) Всъщност, тикай в база данни както казва Вълка, те със сигурност ще са по-ефективни от всичко, което напишеш да работи с .цвс файл (най-малкото техните данни ще се кешират в паметта по-ефективно ако ги използваш често)
Портал за почитателите на Толкин - връзки и новини
[линк]
Съдейки по това какво те е спряло тук е видно, че ти липсва опит. Това не е лошо, не ме разбирай погрешно, но според мен е наивно да отхвърляш съвет, когато ти липсва опит да прецениш добър ли е или не - точно затова те питам защо искаш да направиш това, за да се замислиш дали въобще ти трябва.
Мога да ти дам няколко аргумента защо това, дето си се засилил да го правиш е не само ненужно, но и неефективно - и понеже приемам, че има малка вероятност аз да не съм разбрал правилно какво целиш и да не съм се сетил за случая, в който НАИСТИНА ти трябва да пазиш ип-тата в човешки вид, ще си замълча докато не кажеш какво целиш.
Само не забравяй, че като работиш с толкова големи данни, трябва да целиш не просто решения, които работят, а решения, които работят ефективно. Например - използваш ли foreach в скрипта, с който четеш този файл? Ако използваш - махни го :) Всъщност, тикай в база данни както казва Вълка, те със сигурност ще са по-ефективни от всичко, което напишеш да работи с .цвс файл (най-малкото техните данни ще се кешират в паметта по-ефективно ако ги използваш често)
Портал за почитателите на Толкин - връзки и новини
[линк]
Re: CSV records
само не разбрах що се хабиш, след като човека черно на бяло си е написал "не ми обяснявай как, ми седни да ми го напишеш, щото ме мързи да се занимавам с глупости"...
Just a genius
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
Целия 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
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 нули.
Оправих се и с това, тези които се обадиха с намерние да помогнат - благодаря. Тези, които писаха глупостите си не ме интересуват.
Не става въпрос за базата на 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 нули.
Оправих се и с това, тези които се обадиха с намерние да помогнат - благодаря. Тези, които писаха глупостите си не ме интересуват.
Re: CSV records
е, то все пак не се знае какво му трябва на човека, я ЦКЛ я ЦСВ , усерската му работа.
Абе що ме гони нещото, че е имало един модул в ПХП за работа с ЦСВ и те се връзваха все едно като ЦКЛ и можело да изпълняваш някакви елементарни заявки с това нещо. Ама вчера се разрових из РФМ и не го набарах това чудо.
Абе що ме гони нещото, че е имало един модул в ПХП за работа с ЦСВ и те се връзваха все едно като ЦКЛ и можело да изпълняваш някакви елементарни заявки с това нещо. Ама вчера се разрових из РФМ и не го набарах това чудо.
Re: CSV records
В отговор на:трябваше да се съобрази че long-овете, които почват с 0 (около 80 000) не могат да бъдат обработени от long2ip
сплит -> каст -> джойн