Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Sortowanie po kolei wg długości
Forum PHP.pl > Forum > Przedszkole
Beniooo
Witam, jak posortować dane z pliku txt aby były posortowane rosnąco co do ich długości, każde słowo jest w innym wierszu
Dodam że plik ma ~36MB i 2777114 wierszy biggrin.gif
lobopol
Akcja ma być wywołana jeden raz albo rzadko przez automat? Jeżeli tak to najprostsza metoda to przelecenie freadem po całym pliku i dodać je do plików zawierających konkretną długość plików. Jak to zrobimy połączyć pliki zaczynając od plików zawierających najkrótsze wyrazy. Po całej operacji usunąć pliki zawierające poszczególne długości.
wNogachSpisz
Mysle ze warto wrzucić kazdy wiersz do bazy danych
CTRL
Popieram powyższego kolegę, możesz wtedy dodać sobie dodatkową komórkę czy już wykorzystałeś wyraz.
toaspzoo
Nie ma takiej potrzeby

Otwierasz plik, dzielisz explodem na części, następnie sprawdzasz długości wyrazów i wrzucasz je do innej zmiennej tablicowej - sortujesz i wypisujesz.

Zaraz napiszę coś niecoś smile.gif

Napisałem, mimo, że to nie dział gotowców. proszę smile.gif

http://znajomek.unixstorm.org/sorter.php

Mam nadzieję, że wszystko jest jasne
sobol6803
Cytat
Czwarty wyraz
Siódmy wyraz


Coś nie tak. smile.gif Polskie znaki FTW! tongue.gif
toaspzoo
?
Oba wyrazy mają taką samą długość, więc nie wiem o co chodzi sciana.gif
sobol6803
Cytat(toaspzoo @ 22.07.2012, 01:23:25 ) *
?
Oba wyrazy mają taką samą długość, więc nie wiem o co chodzi sciana.gif


"wyraz" i "wyraz" może tak, ale "czwarty" i "siódmy" raczej nie. smile.gif
toaspzoo
Poprawione, polskie znaki
sobol6803
Cytat
Najdłuższy wyraz jaki kiedykolwiek zapisano na klawiaturze komputera.
to 69 znaków (ze spacjami i kropką), a nie 71. Widać polskie znaki mają długość 2.
toaspzoo
Tak smile.gif

Okej, teraz działa - plik ANSI
sobol6803
Cytat(toaspzoo @ 22.07.2012, 01:41:36 ) *
Tak smile.gif

Okej, teraz działa - plik ANSI


Pozostał tylko tag meta do ustawienia i będzie git. smile.gif
toaspzoo
Dobra, dopisze już go sobie user biggrin.gif
lobopol
toaspzoo genialne rozwiązanie tylko bardzo niewydajne wymagające sporo większej mocy niż podane przeze mnie. Nie ma to jak zrobić tablice z 2777114 wierszy i na niej puścić sortowanie i dodatkowo
  1. for($i=0;$i<count($file_lines);$i++)

Nie wiem czy można to zrobić w gorszy sposób
redeemer
Kod
cat input.txt | awk '{print length,$0}' | sort -n | cut -d " " -f 2 > output.txt
wNogachSpisz
Pragnę zauważyć, że w MySQL od 17 lat zespól wspaniałych fachowców pracuje nad tworzeniem i optymalizowaniem między innymi funkcji sortujących. Wy chcecie to przebić w 15 minut przy pomocy explode..
Łatwo zgadniąć co się lepiej sprawdzi.
toaspzoo
Tylko, załóżmy, że użytkownik będzie edytował plik bezpośrednio na maszynie, nie przez skrypt...
Ponowne wgrywanie do bazy mija się z celem
wNogachSpisz
Co rozumiesz przez "mija się z celem"?

Myśle że to w ogóle dziwna sprawa aby przetwarzać plik tekstowy o rozmiarze 36MB wiersz po wierszu łącznie blisko 3 miliony. Chciałbym wiedzieć czemu to ma służyć w szerszej perspektywie.

Strzelam że tym plikiem jest słownik skrabli tongue.gif
Beniooo
Taa, plik ze słowami, bedzie mi służył do programu na stronie wink.gif
wNogachSpisz
Dlaczego zatem nie umieścić go do bazie danych?
toaspzoo
Można umieścić, pod warunkiem, że jeśli plik będzie ulegał edycji i będzie automatycznie wrzucany do sql za każdym razem.
W innym wypadku, gdy plik nie będzie w ogóle modyfikowany, można wrzucić gotowy, posortowany smile.gif
lobopol
toaspzoo nie zaciemniaj mu. Skoro ma to być używane w jakimś skrypcie to zdecydowanie baza. Przecież nie będzie przy każdej akcji przeszukiwał albo nim manipulował. Wgrać do bazy i kolejne wyrazy pchać już bezpośrednio do bazy. Wiadomo przecież, że na stronie nie będzie wyświetlał ani nie będzie operował na wszystkich 3 milionach wyrazów.
toaspzoo
Tego nie wiemy, może chce posortować plik i zwrócić go w formie pliku...
lobopol
toaspzoo:
Cytat
Taa, plik ze słowami, bedzie mi służył do programu na stronie
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.