Autor | Zpráva | ||
---|---|---|---|
Woal Profil * |
#1 · Zasláno: 5. 3. 2015, 13:08:04
Ahoj potřeboval bych poradit jak rozdělit text. Mám text v následujícím formátu:
NĚJAKÝ TEXT Title: NADPIS Authors: Jméno Příjmení Jméno Příjmení NĚJAKÝ TEXT A potřeboval bych nějak získat ten blok Tittle a pak blok Authors. v celém tom textu se tyto bloky vyskytují vícekrát. a já potřebuju vyparsovat nadpisy a k nim autory. Neví někdo jak to udělat? děkuji. |
||
juriad Profil |
#2 · Zasláno: 5. 3. 2015, 13:16:37
Pokud neuvedeš, jak vypadá NĚJAKÝ TEXT, je to nemožné - může NĚJAKÝ TEXT obsahovat na řádce právě 2 slova? Může v něm řádek začínat „Title:“ nebo „Authors:“.
Evidentně jde o nějaký způsob ukládání článků, ale hodně blbě navržený. Proč nepoužiješ některý ze standardních způsobů (například xml)? |
||
Woal Profil * |
#3 · Zasláno: 5. 3. 2015, 13:27:39
No je tam pod sebou několik přesně formátovaných částí, jako nadpis, autoři a text článku. NĚJAKÝ TEXT bylo spíš jenom znázornění že tam toho je víc. ale třeba nad prvním článkem je ještě nějaký text, neobsahuje slova title ani authors. Tento soubor jsem dostal a já z něj právě mám udělat xml.
|
||
juriad Profil |
#4 · Zasláno: 5. 3. 2015, 13:35:38
Jak poznáš Autora od textu článku? Má snad autor vždy jen dvě slova oddělená mezerou a text článku nikdy nemá na první řádce právě dvě slova oddělená mezerou?
|
||
Woal Profil * |
#5 · Zasláno: 5. 3. 2015, 13:38:12
No napadlo mě, udělat to tak, že bych se snažil získat text vždy mezi klíčovými slovy. Nějak dostat text od Title: po Authors tím bych získal nadpis potom od Author: do Text bych získal authory a od Text: do konce bych získal text článku. ale nevím jak to napsat...
|
||
juriad Profil |
#6 · Zasláno: 5. 3. 2015, 14:13:05
<?php $content = file('clanky.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); $title = null; $articles = array(); foreach ($content as $line) { if (preg_match('/^Title:\s*(.*?)\s*$/u', $line, $matches)) { if ($title != null) { $articles[] = array('title' => $title, 'authors' => $authors, 'text' => $text); } $title = $matches[1]; $authors = array(); $text = false; } else { if (!$text) { if (preg_match('/^Authors:\s*/', $line)) { # no-op } else if (preg_match('/^(\S+)\s+(\S+)\s*$/u', $line, $matches)) { $authors[] = array('first_name' => $matches[1], 'last_name' => $matches[2]); } else { $text = $line; } } else { $text .= "\n" . $line; } } } if ($title != null) { $articles[] = array('title' => $title, 'authors' => $authors, 'text' => $text); } var_dump($articles); Funguje mi to na soubor: Title: NADPIS1 Authors: A B C D Nějaký text článku na víc řádků a ještě jeden Title: NADPIS2 s více slovy Authors: E F G H I J Nějaký text článku na jeden řádek Title: NADPIS3 Authors: Karel Letadlo Nějaký text článku na víc řádků a ještě jeden |
||
Woal Profil * |
#7 · Zasláno: 5. 3. 2015, 15:07:18
Díky moc, vyzkouším to.
|
||
Časová prodleva: 10 let
|
0