php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 18-04-2008, 18:04
erdna
 Newbie
Links : Onlinestatus : erdna ist offline
Registriert seit: Apr 2008
Beiträge: 3
erdna ist zur Zeit noch ein unbeschriebenes Blatt
Standard Dateizeiger

Hi Folks,


ich würde euch gerne mit einer Verständnissfrage beläßtigen.

Das Einlesen einer großen Datei (5-20 GB) bereitet mir etwas Probleme.
Die Struktur sieht so aus (FASTA-Format falls es jemandem bekannt ist):

Zitat:
>header mit ein paar infos (unterschiedliche Längen)
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header
>header mit ein paar infos (unterschiedliche Längen)
Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header_Daten_zu_diesem_header_Daten_zu_diesem_header
Daten_zu_diesem_header
Von ">" zu ">" ist immer ein Block, welcher zusammenhängend "ausgewertet" werden möchte ...
(Jede Zeile kann eine andere Länge haben)

Da natürlich bei dieser Größe das Einlesen in z.B. ein Array ja nicht in Frage kommt, muss Zeilenweise gelesen werden.

Nach einigem Suchen musste ich jedoch leider feststellen, dass php keine Funktion bereitstellt um Zeilenweise den Zeiger zu setzten. Lediglich mit fseek kann jedes Zeichen der Datei "angesprochen" werden.

So etwas wie "$file.next();" gibt es wohl in php nicht, oder? Also ein Zeilenweises navigieren durch z.B. große Dateien o.ä.

Die momentan einzige vermeindlich "schöne" Lsg sehe ich nur darin, mir jede Zeigerposition des ersten Zeichens einer neuen Zeile geben zu lassen und wenn benötigt (immer wenn ein neuer Header kommt) so die Möglichkeit zu haben zur vorherigen Zeile zu springen.

So war die eigentliche Idee:
PHP-Code:
while (gehe Zeilenweise durch die Datei) {

    if (
wenn header) {
        
speicher header temporär (tu noch was damit)
     } else {
        while (
lies nun so lange bis neuer header) {
               
ebenfalls erst einmal tmp ablegen
         
}
         
so nun ganzer block nun bekannt -> tu was

         setze den zeiger um eine zeile zurück 
(um wieder an den nächsten block zu kommen)
     }


Ich hoffe mein Anliegen konnte ich einigermaßen darlegen.

Hab ich nun eine pfiffige Funktion übersehen, oder muss ich diese etwas unschönen Weg über fseek machen?!

Dankeschön schon mal!

Gruß,
Erdna
Mit Zitat antworten
  #2 (permalink)  
Alt 18-04-2008, 18:18
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

schonmal fgets() in betracht gezogen?
Mit Zitat antworten
  #3 (permalink)  
Alt 18-04-2008, 18:29
$_Baker
 Member
Links : Onlinestatus : $_Baker ist offline
Registriert seit: Feb 2008
Beiträge: 220
$_Baker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Steht in diesen Headern die Länge bis zum nächsten Header, wie bei Tranfer-encoding: chunked?
Mit Zitat antworten
  #4 (permalink)  
Alt 18-04-2008, 23:40
erdna
 Newbie
Links : Onlinestatus : erdna ist offline
Registriert seit: Apr 2008
Beiträge: 3
erdna ist zur Zeit noch ein unbeschriebenes Blatt
Post

@krel

Hmmmm ... ja auf fgets bin ich bei meiner Suche natürlich auch gestoßen, jedoch glaube ich das so verstanden zu haben, dass ich nur innerhalb einer Zeile (welche bei länge -1, eof oder line feed endet) springen kann, oder hab ich's missverstanden?!

Ich würd ja gerne Zeilenweise im File "hoch oder runter" navigieren.


@$_Baker

Tja ich hab leider keine Ahnung wovon Du sprichst

Vielleicht hab ich mich falsch ausgedrückt:
Mit "Header" meine ich die Zeile welche mit ">" beginnt. Dieser beschreibt eigentlich nur die biologischen Daten welche im nachfolgenden Block stehen. Es ist kein klassischer Header mit z.B. Metainfos oder so.


Vielleicht ein Beispiel

Zitat:
...
>gi|16409891|emb|CAC98594.1|[16409891]
cgataaaaaagatattagtaatttatttgcaattta
tgctctcttttgtgtaaagcacatcaagcatgtagcaagcatgtagc
cgataaaaaagatattagtaatttatttgcaatttaaac
>gi|NP_28367354.3|Drosophila_melanogaster
tgctctcttttgtgtaaagcacatcaagcatgtagc
cgataaaaaagatattagtaatttatttgcaatttattt
gcgatttttgtcaaagggacagcgatgggttacaag
cgataaaaaagatattagtaatttatttgcaattta
>Lmo_1-2a_EGD-e_a3(xyz)
gcgatttttgtcaaagggacagcgatgggttacaa
...
Gruß,
Erdna
Mit Zitat antworten
  #5 (permalink)  
Alt 18-04-2008, 23:46
$_Baker
 Member
Links : Onlinestatus : $_Baker ist offline
Registriert seit: Feb 2008
Beiträge: 220
$_Baker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

warum willst du unbedingt hochspringen?
Du schaust, ob das > am Anfang der Zeile steht, wenn ja, dann weißt du, das es ein "Header" ist.

PS: Transfer-encoding: chunked bezeichnet eine http-response, die in mehrere Teile aufgeteilt ist, mit zeilen, in denen hexzahlen als längeangabe stehn
Mit Zitat antworten
  #6 (permalink)  
Alt 19-04-2008, 12:34
erdna
 Newbie
Links : Onlinestatus : erdna ist offline
Registriert seit: Apr 2008
Beiträge: 3
erdna ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wenn ich versuche nach dieser Strategie die Datei durchzugehen, muss ich, wenn in der zweiten while schleife der Block Daten zu Ende ist und ein neuer "Header" kommt, den zeiger ja wieder auf diesen header setzten um ihn wieder in dem darüber befindlichen if zur verfügung zu haben!

PHP-Code:
while (gehe Zeilenweise durch die Datei) {

    if (
wenn header) {
        
speicher header temporär (tu noch was damit)
     } else {
        while (
lies nun so lange bis neuer header) { 
Ich glaube ich poste später mal code + bsp. datei.
Ich kanns irgendwie nicht wirklich schön erklären. Vielleicht stehe ich auch RICHTIG auf dem Schlauch.
Mit Zitat antworten
  #7 (permalink)  
Alt 19-04-2008, 13:14
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

PHP-Code:
$fp fopen($filename'r');
if (
$fp) {
    while (!
feof($fp)) {
        
$buffer fgets($fp4096);
        if (
$buffer[0] == '>') {
            
do_something_with($header$data);
            
$header $buffer;
            
$data '';
        } else {
            
$data .= $buffer;
        }
    }
    
fclose($fp);

Dieser Schnipsel braucht nur noch eine geeignete Initialisierung bzw. ein if($header) vor dem Aufruf der do_something-Funktion.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:45 Uhr.