Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]przenoszenie PATH z jednej części linii kodu do innej
qpanas
post 15.07.2009, 20:52:10
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


Mam problem, z którym borykam się od kilku dni. Mam kilka plików z dziesiątkami tysięcy linii do przerobienia. To pytania i odpowiedzi dla Mnemosyne - kurs angielskiego, który sobie wyeksportowałem z oryginalnego Supermemo (legalnej kopii - po prostu skończyłem z Windowsem a pod Linuksem nie dało się używać z oczywistych względów). Format danych w każdej linii jest identyczny i wygląda tak

Cytat
jakiś_tekstTABjakiś_inny_tekst<br><sound src="PATH">


Mnemosyne odczytuje pojedynczą linię i wyświetla ją sformatowaną na podstawie występowania tabulatora. Część, która jest przed tabem jest wyświetlana w jednym oknie, a część po tabie w drugim pod naciśnięciu klawisza "pokaż odpowiedź" i dodatkowo odtwarza się plik dźwiękowy, do którego ścieżka jest po znaczniku <br>
Niestety okazuje się, że muszę przenieść wszystkie ścieżki na lewą stronę tabulatora. Niby prosta operacja w edytorze tekstu CTR-A, CTR-X, CTR-V. Tylko przy ponad dwustu tysiącach linii robiłbym to z rok, albo i dłużej. Chciałem wyprodukować jakiś skrypt albo znaleźć komendę pod konsolą linuksową, która by to z automatu zrobiła. Ale poległem. Próby z sed nie przyniosły skutku (potrafię tylko kilka bardzo prostych rzeczy z jego pomocą zrobić) a programistą nie jestem. Czy wie ktoś jak się do tego zabrać? Będę wdzięczny za każdą pomoc.

Ten post edytował qpanas 15.07.2009, 21:41:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kipero
post 15.07.2009, 21:14:59
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


To znaczy jak ma to wyglądać?
Kod
jakiś_tekst<br><sound src="PATH">TABjakiś_inny_tekst

Z wyrażeniami regularnymi się można pobawić, tylko nie wiem czy jest sens używać do tego PHP - może wystarczy tylko edytor tekstu, który takie rzeczy obsługuje.
Ja spróbowałbym tak:
  1. <?php
  2. $txt = 'jakiś_tekst    jakiś_inny_tekst<br><sound src="PATH">';
  3. $txt = preg_replace('#([^\t]+)\t([^<]+)<br>(.*)#i', "$1<br>$3\t$2", $txt);
  4. echo $txt;
  5. ?>

To tylko przykład, ale można go użyć do tego co chcesz wykonać. Nie mniej jednak może się lekko wykrzaczyć przy 200k rekordów.

Ten post edytował kipero 15.07.2009, 21:15:25


--------------------
Go to the top of the page
+Quote Post
qpanas
post 15.07.2009, 21:33:47
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


Cytat(kipero @ 15.07.2009, 21:14:59 ) *
To znaczy jak ma to wyglądać?
jakiś_tekst<br><sound src="PATH">TABjakiś_inny_tekst


Dokładnie tak ma to wyglądać. Ja początkowo myślałem, żeby wstawić jakiś znacznik pomiędzy pierwszym tekstem i tabulatorem np. %&$ czy inny zestaw znaków, które nie występują w oryginalnym tekście, a potem kazać skryptowi wyszukiwać ścieżki tzn. cały fragment <br><sound src="PATH"> i wycinać a potem wklejać w miejsce tego znacznika. Skrypt musi to robić linia po linii bo jak przeniesie jakąś ścieżkę do innej linii to za diabła nie połapię się w tym i cały kurs angielskiego będzie do kosza. A ja muszę się uczyć języka.

Ten post edytował qpanas 15.07.2009, 21:43:41
Go to the top of the page
+Quote Post
erix
post 15.07.2009, 21:38:22
Post #4





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




Dodaj tag do tematu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kipero
post 15.07.2009, 21:56:37
Post #5





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


No to możesz zastosować ten skrypt, który napisałem, ewentualnie otwórz ten plik w jakimś edytorze z obsługą wyrażeń regularnych. Ja do testów użyłem Notepad++ i dla tego edytora napiszę co i jak:
- otwierasz plik
- menu "Szukaj"|"Zamień"(CTRL + H)
- zaznaczasz tryb szukania na "Wyrażenia regularne"
- w polu "Szukany tekst" wpisujesz: ([^\t]+)\t([^<]+)<br>(.*)
- w polu "Zamień na": \1<br>\3\t\2
Na trochę może to zamulić kompa, ale działa(ja testowałem dla 14k rekordów i trwało dobrą minutę).

Poza tym zrób sobie kopię pliku tej bazy, bo:
Cytat
jak przeniesie jakąś ścieżkę do innej linii to za diabła nie połapię się w tym i cały kurs angielskiego będzie do kosza


--------------------
Go to the top of the page
+Quote Post
qpanas
post 15.07.2009, 22:04:46
Post #6





Grupa: Zarejestrowani
Postów: 30
Pomógł: 2
Dołączył: 12.05.2008

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


Dzięki - postaram się nie zwalić tego ;-)
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 25.07.2025 - 08:06