Datei einlesen und String suchen
DavidB
- php
Guten Morgen!
Ich lese eine dxf-Datei(ASCII) ein und möchte nach einem bestimmten String suchen
$zeilen = file ('z1.dxf');
$key = array_search("LINE", $zeilen);
echo "KEY= ".$key."<br>";
Das liefert leider kein Ergebnis. Wenn ich das Element direkt anspreche
echo "KEY= ". $zeilen[1567];
bekomme ich die korrekte Ausgabe LINE
Woran liegt es?
Gruß
David
Hallo,
teste es doch an einem kleine Beispiel erstmal. Bau Dir ein kleines Array oder eine kleine Datei, gibt die eingelesenen Werte erstmal aus, dann lass die Suche laufen. Der Code sieht doch erstmal korrekt aus.
Gruß
jobo
Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere
$zeilen = array("A","B", "C", "LINE", "X");
$key = array_search("LINE", $zeilen);
echo "KEY= ".$key."<br>";
klappt es. Aber mit selbstgebastelter kleiner txt mit
A
B
C
LINE
X
geht es wieder nicht. *kopfkratz
Hallo,
teste es doch an einem kleine Beispiel erstmal. Bau Dir ein kleines Array oder eine kleine Datei, gibt die eingelesenen Werte erstmal aus, dann lass die Suche laufen. Der Code sieht doch erstmal korrekt aus.
Gruß
jobo
Tach auch.
Zunächst: bitte kein TOFU produzieren. Danke.
Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere
$zeilen = array("A","B", "C", "LINE", "X");
$key = array_search("LINE", $zeilen);
echo "KEY= ".$key."<br>";
>
> klappt es. Aber mit selbstgebastelter kleiner txt mit
> A
> B
> C
> LINE
> X
> geht es wieder nicht. \*kopfkratz
Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).
Kleine Tipp: nutze var\_dump bzw print\_r, um solche Fehlerquellen zu beseitigen (dann siehst du, dass das Array-Element mehr Zeichen enthält, als du erwartest).
Bis die Tage,
Matti
--
[Webapplikationen in C++ entwickeln](http://tntnet.org/)
Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).
Danke euch beiden, das war es. TOFU kannte ich noch nicht, werde es vielleicht beherzigen ;) Der Hinweis auf http://php.net/manual/de/function.trim.php wäre mir lieber gewesen.
Hello,
Das liegt daran, dass im Falle der Datei das Array-Element nicht (!) "LINE" ist, sondern "LINE\n" (der Zeilenumbruch hängt noch dran).
Danke euch beiden, das war es. TOFU kannte ich noch nicht, werde es vielleicht beherzigen ;) Der Hinweis auf http://php.net/manual/de/function.trim.php wäre mir lieber gewesen.
Den Hinweis benötigst Du aber gar nicht, wenn Du dir die (neueren) Möglichkeiten der Funktion file() anschauen würdest
http://de.php.net/manual/en/function.file.php
Ein Funktionsargument steuert das Anhängen von EOL-Marken.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo,
Es scheint an der Datei zu liegen. Wenn ich das Array testweise allein definiere
$zeilen = array("A","B", "C", "LINE", "X");
$key = array_search("LINE", $zeilen);
echo "KEY= ".$key."<br>";
Schau, dann liegt es am Einlesen des Arrays oder eben, wie Matti sagt, daran, dass der String nicht passt. Hängt da der Absatz wirklich dran? Der ist doch der Zeilentrenner. Vielliecht kriegst Du kein Array eingelesen?
var\_dump($deinArray); hilft dann eben.
Gruß
jobo
Hello,
Ich lese eine dxf-Datei(ASCII) ein und möchte nach einem bestimmten String suchen
$zeilen = file ('z1.dxf');
$key = array_search("LINE", $zeilen);
echo "KEY= ".$key."<br>";
>
> Das liefert leider kein Ergebnis. Wenn ich das Element direkt anspreche
>
> `echo "KEY= ". $zeilen[1567];`{:.language-php}
>
> bekomme ich die korrekte Ausgabe `LINE`{:.language-sql}
>
> Woran liegt es?
an den unsichtbaren Zeichen?
Array\_search() fürht einen exaxten Vergleich der "Needle" mit den Elementen des "Haystacks" durch. Diese enthalten aber außer dem gesuchten Begriff auch das Zeilenendezeichen.
ein $zeilen = file ('z1.dxf', FILE\_IGNORE\_NEW\_LINES);
würde Dir vermutlich schon weiterhelfen.
Wenn Du nun aber den Suchstring nur in einem Teil der Zeile suchst, dann könntest Du das Array auch selber iterieren:
$zeilen = file ('z1.dxf', FILE\_IGNORE\_NEW\_LINES);
$found = false;
if (is\_array($zeilen))
{
foreach($zeilen as $lineno => $single\_line)
{
if (false !== ($found = strpos($single\_line, $search)) break;
}
}
else
{
## Fehlerbehandlung für file()
}
if ($found !== false)
{
echo "<p>gesuchter Begriff " .
htmlspecialchars($search) .
" wurde in Zeile <strong>$key</strong> an der Position " .
"<strong>$found</strong> gefunden</p>";
}
else
{
"<p>Suchbegriff wurde nicht gefunden</p>";
}
So oder so ähnlich für die Ein-Byte-Codierung.
Bei UTF-8 müsstest Du die entsprechenden mb-Funktionen benutzen.
<http://de.php.net/manual/en/ref.mbstring.php>
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>