Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zmiana dużej ilości danych
lmdl
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


Witam,

Mam taki problem że potrzebuję zmienić masowo pewne fragmenty pliku tekstowego a następnie go zapisać na dysku.

Struktura wygląda mniej więcej tak:

dfgdf34534,54,34,656,ZNACZNIK1fjfdgj,dfg,345345,5464,234,ZNACZNIK1345dfg,45,fg45


Problem polega na tym że muszę zmienić przecinki na inny znak tylko we fragmencie między znacznikami ale trwa to strasznie długo.

Plik zawierający dane wejściowe zawiera 20 000 000 znaków. Działającą funkcję do podmiany mam napisaną ale szukam teraz szybszego rozwiązania.

Macie jakieś sprawdzone metody ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lmdl
post
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


  1. function replaceBetween($startString, $endString, $searchString, $replaceString, $data,) {
  2. $i = 0;
  3. $err = 0;
  4.  
  5. do
  6. {
  7. $firstFound = strpos($data, $startString,$i);
  8. if( !empty($firstFound) ) {
  9. $secondFound = strpos($data, $endString,$firstFound+1);
  10.  
  11. $searchStringLenght = ($secondFound-$firstFound) + strlen($startString) + 1;
  12.  
  13. $k = $firstFound + strlen($startString);
  14. do
  15. {
  16. $searchStringPos = strpos($data, $searchString, $k );
  17. if( $searchStringPos < $secondFound && !empty($searchStringPos) ) {
  18. $data = substr_replace($data, $replaceString, $searchStringPos, 1);
  19. }
  20.  
  21. $k = $k+1;
  22. } while ( !empty($searchStringPos) );
  23.  
  24. } else $err = 1;
  25. $i = $firstFound + 1;
  26. }
  27. while( $err != 1 );
  28.  
  29. return $data;
  30. }



Cała funkcja. Szuka najpierw początkowego znacznika, następnie końcowego, a później podmienia wartości tylko w tym fragmencie między przedziałami. Niestety przy dużej ilości danych nie sprawdza się.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.12.2025 - 14:03