Brainstorming: Zahlen aus text

Lobedan

Mitglied
Hi,

ich habe mir überlegt ein Script zu schreiben mit dem ich bestimmte Zahlen und die passende Beschreibung aus einem Text herrausfiltere und als array speicher um sie danach wieder benutzen zu können.

Der Text ist ungefähr in der Form
Code:
Wesen:

    *
      Einhornwagen
       300.000 
    *
      Hysterische Zentaurin
       1 
    *
      Singende Halbriesen
       7 
    *
      Elfenmagier
       3.499 
    *
      Feuerfeen
       11 
    *
      Salamander
       3 
    *
      Wurzelwichte
       4 
    *
      Fleischhummeln
       1 
    *
      Gnome
       10 
    *
      Irrlichter
       14 
    *
      Skrälinge
       6 
    *
      Warzengiftratten
       7 
    *
      Sylphen
       36 
    *
      Midgardschlangen
       88 
    *
      Nymphen
       35 
    *
      Schlingpflanzen
       26 
    *
      Meerjungfrauen
       158 
    *
      Werwölfe
       140 
    *
      Gorgonen
       128 
    *
      Harpien
       101 
    *
      Weißadler
       1.519 
    *
      Morlocks
       1.155 
    *
      Riesen Marokspinnen
       1.275 
    *
      Feuerteufel
       3.333 
    *
      Fenriswolf
       6.648 
    *
      Dämon
       7.577 
    *
      Horngolems
       9.670 
    *
      Sonnenpferde
       10.570 
    *
      Minotauren
       39.246 
    *
      Greifen
       34.624 
    *
      Blutalben
       35.009 
    *
      Zyklopen
       59.062 
    *
      Mantikoren
       47.770 
    *
      Behemoth
       18.228 
    *
      Oger
       27.305 
    *
      Sandwürmer
       24.879 
    *
      Todesengel
       6.437.869 
    *
      Goldene Sphinx
       2.221.477 
    *
      Feuerstacheldrachen
       1.197.395 
    *
      Eisaugendrachen
       831.422 
    *
      Schlangenhalsdrachen
       943.567

verfasst. Also als erstes die Bezeichnung und dann dazu der Wert normal könnte ich dann das array irgendwie so
PHP:
<?php
$text = array($bezeichnung => $wert);
?>

definieren.

Nur wie bekomm ich die Daten aus dem Text? Ich bin mit den verschiedenen Techniken rund um das Einbinden von Dateien zum Beispiel ein wenig vertraut (sollte doch das gleiche Prinzip sein oder nicht?) hab aber keine wirkliche Idee welche Funktion man da verwenden könnte bzw. die Daten filtern kann

Hat von euch jemand einen Ansatz? Vielleicht kann man daraus ja etwas brauchbares/schnell entwickeln.

lg Lobedan
 
Wenn die Inhalte wirklich so aus der Datei kommen, dann kannst du sie per file() einlesen und kannst dann genau sagen, dass jede so-und-so-vielte Zeile ein Schlüssel und jede Zeile danach der Wert ist. Und vor dem Einlesen eben die Leerzeichen entfernen.
 
Also theoretisch als Datei speichern und dann noch auslesen.
Okay da wär ne Idee nur ich weiß nicht ober der Text immer gleich ist.
Das soll heißen das Benutzer den Text kopieren aber es könnte sein das er
nicht immer in dieser Variante vorhanden ist.
Kann man den Text so formatieren das er dann einem bestimmten Muster entspricht
und den dann nach einem bestimmten Schema bearbeitet?
Sollte doch in Theorie so funktionieren oder lieg ich da falsch?
 
Könntest es per explode(); in einzelne Zeilen exploden,
mit trim() die Leerzeichen entfernen und dann einfach mit is_numeric() checken ob es numerisch ist.
Wenn ja, in deinem Array speichern ;)


Edith wollte dass ich ein Beispiel poste:
PHP:
$text = 'Wesen:

    *
      Einhornwagen
       300.000 
    *
      Hysterische Zentaurin
       1 
    *
.........';
$strings = explode("\n", $text);
foreach($strings as $key => $out)
{
	if(is_numeric(trim($out)))
	{
		echo trim($out).'<br />';//Die Zahl in dein Array
		echo trim($strings[$key-1]).'<br /><br />';//Und das Wort, bzw. der Satz dadrüber
	}
}
 
Zuletzt bearbeitet:
Wenn der Benutzer anstatt
Code:
      Einhornwagen
       300.000
Code:
Einhornwagen 300.000

eingibt dann geht das Script leider nicht mehr.

Jetzt ist die Frage, kann das vorkommen ?

EDIT:

Hab hier auch noch ein Ansatz:
PHP:
// Kontrollzeichen entfernen
$str   = str_replace(array("\r", "\n"), '', $str);
$array = explode('*', trim($str));

foreach($array as $singleString) {

        preg_match('/[A-Za-z]+/', $singleString, $matchesName);
        preg_match('/[0-9.]+/', $singleString, $matchesNumber);

        if(!empty($matchesName) && !empty($matchesNumber)) {

                $resultArray[] = array_combine($matchesName, $matchesNumber);
                
        }
        
}

Um das entstandene array anzusehen, kannst das benutzen:
PHP:
echo "<pre>"; print_r($resultArray); echo "</pre>";
 
Zuletzt bearbeitet:
Zurück