giełda, akcje, inwestycje
 ° Forum ° Odpowiedz ° Rejestracja ° Szukaj °
Giełda samochodowa ° Numizmatyka - monety ° Poznań serwis Mercerdes ° Internetowa Auto giełda °

Operacje na wielu plikach na raz

Forum / php / Operacje na wielu plikach na raz
Autor Wiadomość
Latet

Posted: 30 Wrz 2008 18:56:05



Witam,


Musze zrobić coś, co w uproszczeniu mogę przedstawić tak:
jest wielki plik tekstowy (50MB, parę milionów wierszy),
każdy wiersz zawiera jedno słowo. Skrypt ma "przelecieć" ten plik
od początku do końca, odczytać każdy wiersz po kolei
i przepisać słowa to kilkudziesięciu plików - tak, że słowa rozpoczynajace
się na literę "a" idą do pliku "a.txt", słowa na litere "b" do pliku "b.txt",
itd...
I tyle.

Aha - to wszystko będzie się wykonywać tylko na localhoscie, raz na wiele dni.

Niby proste, ale... tych plików wynikowych ma być około 100 (słowa są w kilku
różnych alfabetach).
Czy można otworzyć do zapisu aż tyle plików na raz?
Czy można sprawdzić, czy plik o danej nazwie jest już otwarty, jakiś odpowiednik
file_exists() ?
Czy można zamknąć jednym fclose() wszyskie pliki otwarte na raz, nie podając ich
nazw?

Albo inaczej - po odczytaniu każdej kolejnej lini z pliku źródłowego (przypomnę
że są ich miliony),
otworzyć właściwy plik wynikowy, zapisać słowo, zamknać plik wynikowy,
i tak w kółko? Na pewno taka wersja prostsza do napisania jest, ale nie wiem czy
silnik PHP
nie dostanie kota od milionów fopen() / fclose() pod rząd...

Co radzicie?

Dzięki,

latet






Jacek Karczmarczyk

Posted: 30 Wrz 2008 18:59:32




Co radzicie?

Może najpierw przelecieć sortem?




Latet

Posted: 30 Wrz 2008 19:37:18



Co radzicie?
Może najpierw przelecieć sortem?


Hmmm.... to mogę zrobić bez najmniejszego problemu (EditPlus sortuje takie
wielkie pliki szybko i sprawnie).
Jesli plik posortowany będzie, to... rzeczywiście już jakby bardziej z górki.
(hmmm.... wlasciwie to mogę go ręcznie podzielić na te kawałki :-)

Dzięki,

latet





Paweł Andziak

Posted: 30 Wrz 2008 23:01:49




Silnik PHP nie dostanie kota - jest bardzo sprawny, ale
operacje na milionach linii zmierzą się chyba z limitem czasu
wykonywania skryptu.

PHP nie trzeba odpalac przez WWW. Pisalem skrypty PHP-CLI, ktore
chodzily bez problemu kilkadziesiat godzin.

Ale bashem to mozna faktycznie szybciej zrobic, np:

### cut ###
#!/bin/bash

for slowo in `cat slownik.txt`
do
plik=`echo "${slowo}" | egrep -o "^.{1}"`".txt"
echo "${slowo}" ${plik}
done
### cut ###


109852 slownik.txt


real 7m55.337s
user 3m14.860s
sys 4m13.112s

2351 a.txt
3293 b.txt
2935 c.txt
5372 d.txt
2143 e.txt
2289 f.txt
3198 g.txt
1883 h.txt
2166 i.txt
1651 j.txt
7177 k.txt
2819 l.txt
4704 m.txt
5644 n.txt
6566 o.txt
16441 p.txt
561 q.txt
5156 r.txt
10012 s.txt
3455 t.txt
3991 u.txt
7 v.txt
8359 w.txt
2 x.txt
7 y.txt
7670 z.txt
109852 razem





Latet

Posted: 1 Paź 2008 06:09:45



Silnik PHP nie dostanie kota - jest bardzo sprawny, ale
operacje na milionach linii zmierzą się chyba z limitem czasu
wykonywania skryptu.


Jak wspomnialem na wstępie - to ma dzialac tylko na moim localhost (Windows),
gdzie problem limitu czasu nie istnieje, a pamięci na pewno nie zabraknie.

Dziękuję,

latet








Latet

Posted: 1 Paź 2008 06:13:04



plik=`echo "${slowo}" | egrep -o "^.{1}"`".txt"
echo "${slowo}" ${plik}

Chyba aż tak prosto z tym egrep to nie, bo to wszystko jest w UTF-8,
więc nie tylko pierwsze litery słów mogą mieć różną długość w bajtach,
ale też zapewne nie koniecznie powinny być umieszczane w nazawach plików.

Pewnie użyję funkcji z rodziny mb_string, a nazwy plików będą kodami tych liter.
Nie wiem tylko jeszcze czy mają to być kody Unicode, czy jakoś inaczej.

Dzięki,

latet





Twoja wypowiedź

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Wyłącz BB code


Zanim wyślesz jakąś wiadomość z polskimi znakami, upewnij się czy kodowanie znaków w twojej przeglądarce to ISO-8859-2
 » Login  » Hasło 
 


Czas ładowania strony (sek.): 0.430 users

miniBB.net © 2001-2008 | Polityka Prywatności
e-giełdy + opisy gg + kumy fubi ° oko na maroko ° nimda °

Online: Odwiedzający - 1
+ - 0
Najwięcej odwiedzających: 77 [6 Paź 2008 01:40:40]
Odwiedzający - 77 / + - 0
obsługa konferencji krzesła Zbiorniki Noclegi góry księgarnia
  psycholog Toruń|| Zaproszenia ślubne|| Toruń nieruchomości|| Apartamenty Warszawa|| Kate Ryan L.I.L.Y mp3|| praca

  • Podkręcony GeForce 9800 GTX+
  • Sparkle dodaje do swojej oferty podkręconą kartę graficzną GeForce 9800 GTX+, wyposażoną w procesor graficzny G92b, który pracuje z częstotliwością 761 MHz.
  • 20- i 22-calowe desktopy Eee TOP w planach
  • Asus i Quanta pracują już nad komputerami typu all-in-one, należącymi do rodziny Eee TOP. Modele z 20- i 22-calowymi ekranami LCD pojawią się na rynku w pierwszej połowie 2009 roku.
  • Stylowy monitor LCD od AOC
  • AOC F19 to nowy 18,5-calowy monitor LCD, oferujący elegancki design, rozdzielczość 1366 x 768 pikseli, czas reakcji 5 ms oraz współczynnik dynamicznego kontrastu 10 000:1.
  • Komputer barebone z wbudowanym wyświetlaczem
  • D10 to nazwa nowego desktopa typu barebone, który obsługuje procesory z podstawką LGA775, do 4 GB pamięci DDR2 oraz dwa dyski twarde z interfejsem SATA 3.0 Gbps.
  • MMS-y (wreszcie) w iPhonie?
  • Firma Mobispine twierdzi, że dzięki jej staraniom iPhone otrzyma wreszcie prawdziwą aplikację do wysyłania MMS-ów z każdego miejsca na Ziemi.