php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.08.2007, 22:23  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard Problem mit dem Auslesen von ini-Dateien

Guten Tag zusammen,

ich habe eine .ini Datei, die wie folgt aufgebaut ist (nur stark gekürzt hier):

Code:
[zone]
name = test
position = 1

[zone]
name = blubb
position = 2
Ich weiß, das so ein Aufbau unüblich für eine ini Datei ist, aber das zu erklären dauert zu lange und ist auch unwichtig

Wenn ich nun mit parse_ini_file("test.ini", TRUE) auf die Datei zugreife klappt auch alles, nur ist mein Problem, dass die Ausgabe wie folgt aussieht:

Code:
Array
(
    [zone] => Array
        (
            [name] => blubb
            [position] => 2
        )

)
D.h. also dass nur die zweite Section vorhanden ist, da die Namen gleich sind und somit die alte überschrieben wird

Gibt es einen Ausweg dafür?

Danke für eure Antworten im Vorraus.

MfG,
GunsnRoses[/code]
GunsnRoses ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.08.2007, 22:27  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo und willkommen hier im Forum

Nein das ist mit parse_ini_file() nicht möglich, du musst schon eindeutige Sektionsnamen verwenden.
XML würde mehrere gleichnamige Sektionen (bei XML Tags) übrigens unterstüzen.
Zergling-new ist offline  
Alt 13.08.2007, 22:35  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard

Hallo und danke für die schnelle Antwort

Das Problem ist, dass ich riesige ini Dateien auslesen muss, die natürlich nicht von mir stammen. D.h. ich kann es auch nicht einfach in XML umschreiben, das dauert Monate

Wenn jemand noch eine andere Lösung hat kann er es ja schreiben, andernfalls muss ich wohl selbst eine Func zum Auslesen schreiben...

MfG,
GunsnRoses
GunsnRoses ist offline  
Alt 13.08.2007, 22:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Weis den Author doch einfach mal darauf hin, dass sein Format unüblich ist und deshalb mit den implementierten PHP-Funktionen nicht zu parsen ist.
Manche Administratoren sind zwar Eigenbrödler und lassen sich ungern reinreden, aber ein Versuch ist es wert und manchmal wird doch klammheimlich nachgegeben

Manchmal steht übrigens auch in den User-Notes im Manual eine Funktion, die man sucht:
http://de.php.net/parse_ini_file
Sind sehr viele, deshalb hab ich dir diese Arbeit nicht abgenommen.

Andernfalls machste dir halt ne parse_custom_ini_file, Datei mit file() einlesen, den Array dann in einer Schleife durchlaufen und die Sektionen mit strpos($row, '[') === 0 erkennen.
Mit explode(" = ", $row, 2) Schlüssel und Wert trennen und auf den Wert noch ein trim($wert, '"'); werfen, um mögliche Anführungszeichen am Rand zu entfernen.
Das wars.
Zergling-new ist offline  
Alt 14.08.2007, 10:47  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard

Moin moin,

der Autor nennt sich Microsoft und die ini Dateien stammen aus dem Spiel "Freelancer" ich möchte eben eine Liste mit Handelsgüter etc. erstellen, das sagt euch aber jetzt eh nichts, deswegen wollte ich es eigentlich lassen ^.^

Die User-Notes bin ich durchgegangen und habe bis auf einen Eintrag, der mir allerdings nicht viel hilft leider nichts gefunden.

Ich werde wohl oder übel meine eigene Funktion schreiben müssen
GunsnRoses ist offline  
Alt 14.08.2007, 11:33  
Erfahrener Benutzer
 
Registriert seit: 17.01.2006
Beiträge: 468
Slava
Standard

Zitat:
Zitat von GunsnRoses
Ich werde wohl oder übel meine eigene Funktion schreiben müssen
das tun wir doch alle!
Der einsatz ist dir eigentlich gut beschrieben worden.
Es ist eben so, dass man nicht für alles eine fertige funktion findet.
Ausserdem habe ich bemerkt, dass die Suche auf eine fertige Funktion mehr Zeit in Anspruch nehmen kann, als eine Eigene zu schreiben.
deine Aufgabe ist ziemlich simpel und dazu hast du ein Lösungsvorschläge bekommen.
Wenn du nicht mehr weiter kommst, dann versuch mal bei Gesuche-Forum.
__________________
Slava
http://bituniverse.com
Slava ist offline  
Alt 14.08.2007, 12:10  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard

Ist ja gut, ich wollte eben nur wissen ob jmd. eventuell schonmal das gleiche Problem gehabt hat.

Ich habe meine Func jetzt auch fertig und es funktioniert auch alles (für meinen Bedarf)

MfG,
GunsnRoses
GunsnRoses ist offline  
Alt 14.08.2007, 14:15  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Wär toll wenn du sie hier posten würdest, falls mitlesende das gleiche Problem haben
Zergling-new ist offline  
Alt 14.08.2007, 17:18  
Neuer Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 6
GunsnRoses
Standard

Zitat:
Zitat von Zergling
Wär toll wenn du sie hier posten würdest, falls mitlesende das gleiche Problem haben
Kann ich machen, aber

1. sie ist eigentlich nur für meinen einmaligen Gebrauch
2. ist sie wohl komisch geschrieben (eigener Style xD)
3. wird sie wohl bei einigen Fehler hervorrufen, aber nagut:

PHP-Code:
<?
function readini($filename) {
    
$handle fopen($filename"r");
    while (!
feof($handle)) {
        
$content .= fgets($handle);
    }
    
fclose ($handle);
    
$ini_array = array();
    
$num substr_count($content"[");
    for (
$j 0$j $num$j++) {
        
$pos1 strpos($content"[");
        
$pos2 strpos($content"["$pos1 1) -1;
        if (
$j == $num) {
            
$section substr($content$pos1);
        }
        else {
            
$section substr($content$pos1$pos2 $pos1);
        }
        
$pos1 strpos($section"[");
        
$pos2 strpos($section"]"$pos1 1) -1;
        
$sectionname substr($section$pos1 1$pos2);
        
$i 1;
        
$old_sectionname $sectionname;
        while (
is_array($ini_array[$sectionname])) {
            
$sectionname $old_sectionname $i;
            
$i++;
        }
        
$ini_array[$sectionname] = array();
        
$lines explode("\n"$section);
        foreach (
$lines as $key => $value) {
            if (
substr_count($value"=") == 0) continue;
            
$entry explode("="$value);
            
$name trim($entry[0]);
            
$wert trim($entry[1]);
            
$i 1;
            
$old_name $name;
            while (!empty(
$ini_array[$sectionname][$name])) {
                
$name $old_name $i;
                
$i++;
            }
            
$ini_array[$sectionname][$name] = $wert;
        }
        
$content str_replace($section""$content);
    }
    return 
$ini_array;
}
?>
Ich übernehme keine Haftung und will eigentlich auch keinen Support tragen Aber wenn sie jemand verbessert kann er sie ja reinschreiben

MfG,
GunsnRoses
GunsnRoses ist offline  
Alt 16.08.2007, 12:23  
Erfahrener Benutzer
 
Benutzerbild von GelaMu
 
Registriert seit: 05.03.2006
Beiträge: 183
GelaMu
Standard

Zitat:
Zitat von GunsnRoses
Ich übernehme keine Haftung und will eigentlich auch keinen Support tragen Aber wenn sie jemand verbessert kann er sie ja reinschreiben

MfG,
GunsnRoses
Wenn ich mich mal einmischen darf
Ist etwas kürzer denke ich.
PHP-Code:
<?php

function readini($filename) {
    if(!
is_file($filename) || !is_readable($filename)) {
        return 
false;
    }
    
$lines file($filename);
    
$num_lines sizeof($lines);
    
$section_nr = array();
    
$entries = array();
    for(
$i 0$i $num_lines$i++) {
        
$line trim($lines[$i]);
        if(
strpos($line"[") === && strrpos($line"]",2) == strlen($line)-1) {
            
$section substr($line1, -1);
            if(
in_array($sectionarray_keys($entries))) {
                
$section_hash md5($section);
                if(!isset(
$section_nr[$section_hash])) {
                    
$section_nr[$section_hash] = 0;
                }
                
$section .= ++$section_nr[$section_hash];
            }
            
$entries[$section] = array();
            while(
$i $num_lines) {
                
$line trim($lines[++$i]);
                
$exp explode("="$line2);
                if(
sizeof($exp) == 2) {
                    
$entries[$section][rtrim($exp[0])] = ltrim($exp[1]);
                } else {
                    
$i--;
                    break;
                }
            }
        }
    }
    return 
$entries;
}

?>
GelaMu ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Leerzeichen ersetzen Problem bei dateien mokus PHP Tipps 2006 20 24.05.2006 19:51
nur bestimmte Dateien aus einem Verzeichnis auslesen Madden PHP Tipps 2006 2 07.03.2006 17:10
Problem beim Kopieren von Dateien Smiley PHP Tipps 2006 5 04.02.2006 00:11
Problem beim Auslesen von MySQL: Fehler GSJLink PHP Tipps 2006 15 02.01.2006 17:37
[Erledigt] Problem beim Auslesen von Checkbox Values PHP Tipps 2007 16 09.12.2005 09:38
Mehrere Dateien uploaden (foreach Problem) pixelcut PHP-Fortgeschrittene 3 09.11.2005 17:34
dateien ausgeben kein Problem - ABER! dsmcg PHP Tipps 2005-2 9 22.10.2005 19:59
Auslesen von fremden dateien??? m-elssner PHP Tipps 2005-2 18 22.09.2005 10:33
[Erledigt] Problem mit User/Group: nobody(99)/99 Server, Hosting und Workstations 3 09.07.2005 15:31
Problem beim Dateien zählen thefaxx PHP Tipps 2005-2 7 01.07.2005 20:47
PHP Verzeichnisstruktur und Dateien auslesen Chr!s PHP Tipps 2005 2 05.03.2005 14:37
Problem bei Dateiupload bei großen Dateien Calli PHP Tipps 2005 4 13.01.2005 16:13
Datei auslesen ergibt ein Problem Fraylman PHP Tipps 2004-2 4 22.12.2004 10:12
Dateien aus Ordner andersherum auslesen nsane PHP Tipps 2004-2 1 08.12.2004 17:29
Problem beim Upload mehrerer Dateien per Script PHP Tipps 2004 1 04.08.2004 16:26

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php ordner auslesen bei bedarf, php name aus .ini lesen, .ini auslesen php, freelancer ini datei erstellen, ini dateien lesen fehler, parse_ini_file daten einlesen, parse_ini_file, ini auslesen parse_ini_file php, freelancer ini auslesen, php ini dateien einlesen, mysql parse_ini_file anführungszeichen, php aus ordner dateinamen auslesen mit .ini, parse_ini_file problem, .ini auslesen while mit php, parse_ini_file anführungszeichen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:49 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.