Duże pliki |
Duże pliki |
13.03.2011, 11:22:25
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) |
Mam dwa duże pliki (pierwszy: 40 MB, drugi - 20 MB) zawierające pewne dane w takiej postaci:
pole1 [tabulator] pole2 [tabulator] pole3 Chciałbym do każdego wiersza dodać jeszcze jedno pole i dla każdego wiersza nadać wartość dla tego pola, a następnie posortować względem tego dodanego pola i wyświetlić powiedzmy 1000 pierwszych wierszy. Więc chcę to wrzucić do bazy danych, tylko jak? -------------------- WIELKIE DZIĘKI ZA POMOC!
|
|
|
13.03.2011, 11:30:23
Post
#2
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
Czytać pliki po kawałku. Przecież w PHP jest cała masa funkcji, które pozwalają Ci wczytywać plik mniejszymi porcjami, np. po 2 KB, albo po jednej linijce. Wtedy taki plik, o ile będziesz regularnie kasować już wczytane i przetworzone dane, może mieć nawet i gigabajt.
-------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
15.05.2011, 16:28:15
Post
#3
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) |
To mógłbyś dać jakiegoś linka do opisu funkcji, które pozwolą mi wczytać za pierwszym wywołaniem skryptu pierwsze 2 KB, później drugie 2 KB itd. ? Bo jakoś nie mogę znaleźć.
-------------------- WIELKIE DZIĘKI ZA POMOC!
|
|
|
15.05.2011, 16:57:55
Post
#4
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) |
Kod dopisze [tabulator] pole4 do każdego wiersza z pliku wejsciowy.csv i zapisze wynik do wyjsciowy.csv. Ten post edytował kiler129 15.05.2011, 16:58:43 -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
17.05.2011, 19:54:09
Post
#5
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 16.10.2007 Ostrzeżenie: (0%) |
Czym ten kod, który napisałeś, różni się właściwie od zwykłego wczytania i zapisania pliku? Chodzi mi o wczytanie najpierw fragmentu pliku od 0 KB do 2 KB, później od 2 KB do 4 KB itd.
-------------------- WIELKIE DZIĘKI ZA POMOC!
|
|
|
17.05.2011, 20:32:07
Post
#6
|
|
Grupa: Zarejestrowani Postów: 782 Pomógł: 153 Dołączył: 21.07.2010 Ostrzeżenie: (0%) |
Zapytam inaczej - czy ta baza w którą chcesz to wrzucić to baza np. hostingu? Czy chodzi ci ogólnie o import CSV do bazy (może być lokalna instancja) ?
-------------------- Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]! |
|
|
17.05.2011, 20:35:12
Post
#7
|
|
Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) |
To jest właśnie zwykłe czytanie pliku. A różni się tym, że tutaj w pamięci w każdym momencie działania skryptu masz jedynie dwukilobajtowy fragment pliku w pamięci, natomiast to, co nazywasz "normalnym" czytaniem, choć wcale nim nie jest, wczytuje wszystko za jednym zamachem.
-------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
18.05.2011, 14:28:56
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 1 Dołączył: 21.11.2010 Ostrzeżenie: (0%) |
jak masz dostęp do konsoli to szybciutko możesz przerzucić taki pliczek csv do bazy poleceniem mysqlimport ...
|
|
|
18.05.2011, 14:47:14
Post
#9
|
|
Grupa: Zarejestrowani Postów: 566 Pomógł: 35 Dołączył: 21.06.2006 Ostrzeżenie: (0%) |
Czym ten kod, który napisałeś, różni się właściwie od zwykłego wczytania i zapisania pliku? Chodzi mi o wczytanie najpierw fragmentu pliku od 0 KB do 2 KB, później od 2 KB do 4 KB itd. Tym, że jak powiedziano w ramie zalega mi max 8KB danych (1 linijka). Jeśli chcesz dokładnie 2KB to zmieniasz fgets($res) na fread($res, 2048); -------------------- flexiCMS v2 [|||||||+--] 75% done
|
|
|
Wersja Lo-Fi | Aktualny czas: 25.04.2024 - 00:46 |