Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]operacje na plikach
lamcpp
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


mam plik *.txt, który wygląda mniej więcej tak:
2.0 1992.11 1975.10 22
1.1 1992.11 1975.10 35
1.1 SLE 1972.11 1975.10 40
&1300 MARATHON 1973.109 1975.08 42
...

Pytania:
-jak /przy pomocy jakiej funkcji dodać na początku każdego wiersza znak "$" (ale dodać tylko w tych wierszach, które nie mają znaku "&" na początku)
-jak usunąć wszystkie nadmiarowe spacje powyżej jednej
- za pomocą jakiej funkcji dodać przed ostatnimi numerami w rzędzie czyli przed 22, 35, 40, 42 znak ":", jak pomiędzy datami dodać znak "-"?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Ciekawe...

Ciekawe, czy posiadając plik o rozmiarze kilkuset MiB użyjesz tego samego.
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Cytat(erix @ 8.06.2011, 10:41:41 ) *
Ciekawe...

Ciekawe, czy posiadając plik o rozmiarze kilkuset MiB użyjesz tego samego.

Podejrzewam, że przy pliku o rozmiarze kilkudziesięciu MiB byłyby już problemy, a przetwarzanie plików o rozmiarze kilkuset MiB dla obu metod byłoby czasochłonne, choć z pewnością funkcja file() wygrałaby ewentualną rywalizację.
Osobiście przerzuciłbym dane do bazy danych.

Wracając do tematu:
  1. $wzorzec[0]='#^[^&|$].*([0-9]{4}.[0-9]{2})\040([0-9]{4}.[0-9]{2}).*$#m';
  2. $zamiana[0]='$1-$2:';

We wszystkich wzorcach zamień \s na \040, jak radził bastard13, a nie będzie problemów ze "zjedzonym" znakiem nowej linii.

Swoją drogą mój poprzedni kod nie działa do końca prawidłowo (jeszcze nie wiem dlaczego). Natomiast do usunięcia pustych linii możemy również wykorzystać funkcję preg_replace():
  1. $sourceFileName = 'data.txt';
  2. $content = file_get_contents($sourceFileName);
  3. $pattern = "#(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+#";
  4. $replacement = "\n";
  5. $contentWithoutEmptyLines = preg_replace($pattern, $replecement, $content);
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: 9.10.2025 - 20:56