21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
Woal
Profil *
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
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 *
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
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 *
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
<?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 *
Díky moc, vyzkouším to.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0