Bestimmte Zahl aus Textfile auslesen
wuscheck
- php
Hallo,
gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?
Beispiel:
Ausschnitt aus dem Textfile:
.
.
.
[Teams]
1=TVL
2=SGD
3=HSG
4=TVK
5=HSGO
6=SGDB
7=TGS
8=TGN
.
.
.
Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?
Gruss
Patrick
Moin wuscheck,
gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?
Beispiel:
4=TVK
Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?
Die Funktion explode() sollte Dir weiter helfen:
http://www.php.net/manual/de/function.explode.php
regds
Mike©
gibt es eine Möglichkeit eine Zahl aus einem Textfile auszulesen?
Beispiel:
4=TVK
Ich brauche nur die Zahl, die vor TVK steht..., geht das? Und wenn ja wie?Die Funktion explode() sollte Dir weiter helfen:
http://www.php.net/manual/de/function.explode.php
Und wie kann ich erkennen wo in diesem Textfile diese Zeile steht? Und die zweite Frage: wie bekomme ich diese Zeile in eine Variable,d amit ich dann mit explode weiterarbeiten kann?
Gruss
wuscheck
Hast du die Datei geöffnet?
http://de3.php.net/manual/de/function.fopen.php
Hast du die Datei geöffnet?
Öffnen speichern und so weiter ist nicht das Problem...
In der Datei stehen ausser den Teams auch noch andere Informationen, die ich nicht brauche...
Die Infos die ich benötige stehen unter dem Begriff [Teams] und dann wiederum in einer der Zeilen...
Das Proggi ist ein Fremdprogramm... um allerdings die Daten für andere Programme "brauchbar" zu machen brauche ich die Zahl (id) vor dem Namen meines Heimatvereins....
Heisst für mich also:
Suchen nach dem Heimatverein im Textfile und dann erkennen der ID...
Leider hab ich mehr mit DB am Hut als mir Textfiles... eine kleine Hilfe wäre super.
Gruss
wuscheck
Moin nochmal,
Suchen nach dem Heimatverein im Textfile und dann erkennen der ID...
Leider hab ich mehr mit DB am Hut als mir Textfiles... eine kleine Hilfe wäre super.
Es geht sicher eleganter, aber dass sollte Dir weiter helfen.
Am Beispiel für TVK:
$pointer=fopen($Pfad_Dateiname,"r");
if ( $pointer )
{
while(!feof($pointer))
{
$line=fgets($pointer, 512);
$ID=explode("=",$line);
if ( $ID[1] == 'TVK' )
{
$Gesuchte_ID=$ID[0];
break;
}
}
flcose($pointer);
}
*KOPFEINZIEH*
regds
Mike©
$pointer=fopen($Pfad_Dateiname,"r");
if ( $pointer )
{
while(!feof($pointer))
{
$line=fgets($pointer, 512);
$ID=explode("=",$line);if ( $ID[1] == 'TVK' )
{
$Gesuchte_ID=$ID[0];
break;
}
}flcose($pointer);
}
Danke für die Hilfe!!!
Hello,
Es geht sicher eleganter, aber dass sollte Dir weiter helfen.
gewiss:
$_ini = parse_ini_file('dateiname');
$key = array_search($wert, $_ini['Teams']);
Und dann aber drauf achten, ob $key === false ist. Dann wurde nämlich kein Rang gefunden.
$key $wert
1=Blah
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Hello,
Hello,
Es geht sicher eleganter, aber dass sollte Dir weiter helfen.
gewiss:
$_ini = parse_ini_file('dateiname');
$_ini = parse_ini_file('dateiname',true);
$key = array_search($wert, $_ini['Teams']);
Und dann aber drauf achten, ob $key === false ist. Dann wurde nämlich kein Rang gefunden.
$key $wert
1=BlahHarzliche Grüße vom Berg
esst mehr http://www.harte-harzer.deTom
Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de
Tom
Moin nochmal,
Und wie kann ich erkennen wo in diesem Textfile diese Zeile steht? Und die zweite Frage: wie bekomme ich diese Zeile in eine Variable,d amit ich dann mit explode weiterarbeiten kann?
Ich ging davon aus, dass Du die Datei zeilenweise lesen kannst.
Ist dem nicht so? Dann würde Dein Problem aus mehreren Fragen bestehen.
regds
Mike©
Hallo,
[Teams]
TVL=1
SGD=2
HSG=3
wenn Du es so aufbaust, und Dann die Funktion parse_ini_file()
http://de.php.net/manual/en/function.parse-ini-file.php
benutzt, geht alles wie von selbst...
LG
Chris
Moin!
Ist der Text eindeutig?
Ist die Datei sehr groß?
Ok. Die Datei ist "sehr" groß.
<?
$str="TGS";
$strFile="datei.dat";
$strZeile=system("grep $str $strFile");
$arZeile=explode("=", $strZeile);
echo $arZeile[0];
?>
Variante A1 (mit AWK):
$str="TGS";
$strFile="datei.dat";
$strZahl=system("grep $str $strFile | awk -F= '{ print $1 }'");
echo $strZahl;
Du solltest $str und $strFile mit escapeshellcmd() behandeln, falls diese Daten _irgendwie_ von außen beinflusst werden können.
Variante 2 für "kurze" Dateien (Alles in PHP:)
<?
$str="TGS";
$strFile="datei.dat";
$arZeilen=file($strFile);
foreach ($arZeilen as strZeile) {
$arZeile=explode("=", $strZeile);
if ($arZeile[1]==$str) {
echo $arZeile[0];
break;
}
}
?>
Der Unterschied ist folgender: Wenn datei.dat wirklich sehr groß ist ist das nicht nur schneller (der UNIX-Befehl grep ist schnell...), sondern spart auch das Einlesen in PHP: Folge: Du umgehst eine möglicherweise zur Disfunktion führende Speicherbeschränkung :)
Allerdings solltest Du bei solchen Dateigrößen schon eine Datenbank benutzen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Da hatte sich ein Fehler eingeschlichen. Beim Vergleich muss "getrimmt" werden. Grund: das letzte Element, des mit explode() hergestellten Arrays enthält den Zeilenumbruch mit.
Außerdem hatte ich ein $-Zeichen vergessen.
Hier also die PHP-Version:
<?
$str="TGS";
$strFile="datei.dat";
$arZeilen=file($strFile);
foreach ($arZeilen as $strZeile) {
$arZeile=explode('=', $strZeile);
# Zerlege die Zeile in ein Array am '='
if (trim($arZeile[1])=="$str") {
# wenn Übereinstimmung besteht:
echo $arZeile[0];
# Ausgabe
break;
# Schleife beenden, muss ja nicht sinnlos weiter "rennen".
}
}
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
<?
Variante A1 (mit AWK):
$str="TGS";
$strFile="datei.dat";Einlesen der einen Zeile mit dem "system()" Befehl und Unix-Zeilenfilter grep und AWK
$strZahl=system("grep $str $strFile | awk -F= '{ print $1 }'");
echo $strZahl;
?>
Mal eine Frage in die Runde: grep und (g)awk gelten als sehr performant. Aber wie ist es mit dem System-Aufruf?
Hat da irgendwer einen Tip, wo ich dazu was anlesen kann? Nicht wie es geht, sondern zu Performance-Fragen. Obiger Filter spart ja immerhin ein paar Schleifchen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®