SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Handbuch der Java-Programmierung

Handbuch der Java-Programmierung zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 09.07.2005, 22:51:02
swishy swishy ist offline
Anfänger
 
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Hallo!

Ich hoffe, ihr könnt mir hier weiter helfen. Ich möchte ein sprach file auslesen um es online editeren zu können. also ich habe ein Sprachfile das in etwas so aussieht:

Code:
define("PFL_adm_accessrights"			,"Access right");
define("PFL_adm_accessrights_of_gr"		,"Access rights for this group");
define("PFL_adm_accessrights_to_boards"	,"Access rights to the boards");
define("PFL_adm_account_created"		,"Account created");
define("PFL_adm_activate_notify"		,"Aktivate email notification")
Natürlich viele mehr

jetzt möchte ich das zeilenweise durchsuchen und für jede Zeile die jeweiligen defines, also bei zeile 1 zb
"PFL_adm_accessrights" und den wert "Access right"
Auslesen um ein editier formular auf zu bauen.

Beim speichern, soll er dann umgekehrt die entsprechende Zeilen wieder überschreiben und dabei den neuen Wert anstatt den alten (bei Zeile 1 Access right) an der richtigen Stelle wieder einfügen.

Geht das überhaupt mit php? - ich beis mir dran die Zähne aus. jede Zeile ist ja unterschiedlich lang.

Danke für jeden tipp

Gruß: Swishy
Mit Zitat antworten
  #2  
Alt 09.07.2005, 23:13:32
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Die Datei kannst du mit file() zeilenweise in ein Array lesen. Anschließend durchläufst du das Array mit einer foreach() und filterst sowohl Namen als auch Wert der Konstanten mit einem regulären Ausdruck heraus:
PHP-Code:
<?php
    $regex 
'#^define\("(.*)"\s*,\s*"(.*)"\);#';
    
$arr file($file);
    
$i 0;
    if(
$arr !== false) {
        foreach(
$arr as $line) {
            
$line trim($line);
            
preg_match($regex$line$matches);
            
$key $matches[1];
            
$val $matches[2];
            print 
'Name: <input type="text" name="key[' $i ']" value="' htmlentities($key) . '" />';
            print 
'Wert: <input type="text" name="val[' $i ']" value="' htmlentities($val) . '" />';
            
$i++;
        }
    }
?>
Nach dem Versenden des Formulars setzt du den neuen Inhalt mit Hilfe eine foreach-Schleife zusammen und speicherst diesen in der Datei:
PHP-Code:
<?php
    $content 
= array();
    foreach(
$_POST['key'] as $i => $key) {
        
$content[] = 'define("' strip_tags($key) . '", "' strip_tags($_POST['val'][$i]) . '");';
    }

    
$fp fopen($file'w');
    
fwrite($fpimplode("\n"$content));
    
fclose($fp);
?>
Unter Windows sind zwei kleine Änderungen notwendig:
- beim Schreiben in die Datei muss diese vorher zusätzlich noch mit der Option b (binär) geöffnet werden: $fp = fopen($file, 'wb');
- beim Zusammensetzen des Inhaltes geschieht der Zeilenumbruch durch \r\n statt \n: fwrite($fp, implode("\r\n", $content));
Mit Zitat antworten
  #3  
Alt 09.07.2005, 23:54:33
swishy swishy ist offline
Anfänger
 
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Wow - Das war ja mal eine echt schnelle antwort, und es klappt exakt so - Vielen Vielen Dank!

Jetzt hab ich nur noch ein Problem, das die php tags am Anfang und Ende der Datei gelöscht werden, und natürlich auch alle Comments die drin sind

Kann man dem noch sagen irgendwie, das er diese Zeilen überspringt?

Ansonsten zeigt er für diese Zeilen auch felder ohne inhalt und beim speichern sind alle diese Zeilen weg.

Hoffe da gibts auch eine Lösung.

Es ist echt der Hammer was Ihr Profies so drauf habt, da wäre ich nie drauf gekommen.

Greetz: Swishy
Mit Zitat antworten
  #4  
Alt 10.07.2005, 00:15:34
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Zitat:
Zitat von swishy
Kann man dem noch sagen irgendwie, das er diese Zeilen überspringt?
Wenn du preg_match() mit einer if-Abfrage kombinierst, kannst du diese Zeilen überspringen:
PHP-Code:
foreach($arr as $line) {
            
$line trim($line);
            if(
preg_match($regex$line$matches)) {
                
$key $matches[1];
                
$val $matches[2];
                print 
'Name: <input type="text" name="key[' $i ']" value="' htmlentities($key) . '" />';
                print 
'Wert: <input type="text" name="val[' $i ']" value="' htmlentities($val) . '" />';
            }
            
$i++;
        } 
Damit die PHP-Tags später auch wieder in der Datei gespeichert werden, kannst du die Zeilen zum Speichern entsprechend modifizieren:
PHP-Code:
<?php
    $content 
"<?php\n" implode("\n"$content) . "\n?>";
    
fwrite($fp$content);
?>
Mit Zitat antworten
  #5  
Alt 10.07.2005, 00:21:05
swishy swishy ist offline
Anfänger
 
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Du bist echt der hammer, so hat es geklappt mit den php tags. Nur mit den comments zwischen den zeilen nicht leider:

damit du weist welche ich meine
Code:
//V
define("PFL_adm_view"				,"View");
define("PFL_adm_voluntare_data"		,"Optional user infos");

//W
define("PFL_adm_write_mess_to_user"	,"Write message to user");
define("PFL_adm_write"				,"write");
define("PFL_adm_writer"				,"Writer");
define("PFL_adm_worung_filetype"	,"Wrong file type!");

//X

//Y
define("PFL_adm_yes","Ja");
define("PFL_adm_you_should_indi_file","a file is required to proceed!");

//Z
also die lehren Zeilen und kommentare - kann man die in hidden fields irgendwie sichern - sorry, das ich Dich so löchere, aber wenn ich schon einen finde, der so extrem drauf is mit Wissen -

Wär toll, wenn Du mir da auch noch einen tipp geben kannst:

Danke : Swishy
Mit Zitat antworten
  #6  
Alt 10.07.2005, 00:38:04
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Achso, jetzt verstehe ich. Dann speichere einfach die Zeilen, die nicht Definitionen von Konstanten darstellen in einer Session zwischen und hole sie dir hinterher wieder:
PHP-Code:
$_SESSION['comments'] = array();
foreach(
$arr as $line) {
            
$line trim($line);
            if(
preg_match($regex$line$matches)) {
                
$key $matches[1];
                
$val $matches[2];
                print 
'Name: <input type="text" name="key[' $i ']" value="' htmlentities($key) . '" />';
                print 
'Wert: <input type="text" name="val[' $i ']" value="' htmlentities($val) . '" />';
            } else {
                
$_SESSION['comments'][$i] = $line;
            }
            
$i++;
        } 
Allerdings musst du so auch noch einmal Änderungen beim Speichern der Zeilen vornehmen:
PHP-Code:
<?php
    
//  Maximum ermitteln
    
$max 0;

    
//  Maximum $_POST
    
$keys array_keys($_POST['keys']);
    
rsort($keys);
    
$max $keys[0];

    
//  Maximum $_SESSION
    
$keys array_keys($_SESSION['comments']);
    
rsort($keys);
    if(
$keys[0] > $max)
        
$max $keys[0];

    
$content = array();

    for(
$i 0$i $max$i++) {
        if(
array_key_exists($i$_POST['keys'])) {
            
$content[] = 'define("' strip_tags($key) . '", "' strip_tags($_POST['val'][$i]) . '");';
        } else {
            
$content[] = $_SESSION['comments'][$i];
        }
    }

    
//  und dann so weiter wie im 1. Beispiel
?>
Mit Zitat antworten
  #7  
Alt 10.07.2005, 01:00:12
swishy swishy ist offline
Anfänger
 
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

also ich hab das jetzt dann beim speichern so:
Code:
    //  Maximum ermitteln 
    $max = 0; 

    //  Maximum $_POST 
    $keys = array_keys($_POST['keys']); 
    rsort($keys); 
    $max = $keys[0]; 

    //  Maximum $_SESSION 
    $keys = array_keys($_SESSION['comments']); 
    rsort($keys); 
    if($keys[0] > $max) 
        $max = $keys[0]; 

    $content = array(); 

    for($i = 0; $i < $max; $i++) { 
        if(array_key_exists($i, $_POST['key'])) { 
            $content[] = 'define("' . strip_tags($key) . '", "' . strip_tags($_POST['val'][$i]) . '");'; 
        } else { 
            $content[] = $_SESSION['comments'][$i]; 
        } 
    }


    $fp = fopen($file, 'w'); 
    fwrite($fp, implode("\n", $content)); 
    fclose($fp);
und beim erfassen so:
Code:
 
function showLanguage($file) {
  $file = stripslashes($file);
  $f=fopen($file,"r");
  $content = fread($f, filesize($file));
  $content = htmlspecialchars($content);
    $regex = '#^define\("(.*)"\s*,\s*"(.*)"\);#'; 
    $arr = file($file); 
    $i = 0; 
    if($arr !== false) { 
	$_SESSION['comments'] = array(); 
        foreach($arr as $line) { 
            $line = trim($line); 
            if(preg_match($regex, $line, $matches)) {  
	            $key = $matches[1]; 
	            $val = $matches[2]; 
				print '<tr>';
	            print '<td width="20%" class="left">' . htmlentities($key) . ' <input type="hidden" name="key[' . $i . ']" value="' . htmlentities($key) . '" /></td>'; 
	            print '<td class="left"><input size="100" type="text" name="val[' . $i . ']" value="' . htmlentities($val) . '" /></td>'; 
	            print '</tr>';
			}else{
			$_SESSION['comments'][$i] = $line;
			   	echo "<tr><th colspan=2>$line</th></tr>";
			}
			$i++; 
        } 
    } 

}
aber er speichert nix ab von den Änderungen - aber er liest wie du gesagt hast die comments extra aus

Hab ich was irgendwo falsch?

Danke: Swishy
Mit Zitat antworten
  #8  
Alt 10.07.2005, 01:03:40
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Pack mal folgende Zeilen direkt vor die for-Schleife:
PHP-Code:
<?php
    
print '<pre>';
    
var_dump($max);
    
print_r($_POST);
    
print_r($_SESSION);
    print 
'</pre>';
?>
Wie sieht die Ausgabe aus?

Nachtrag: Du kannst dir auch $content vor fwrite() mal mit print_r() anzeigen lassen.

Geändert von xabbuh (10.07.2005 um 01:04:35 Uhr)
Mit Zitat antworten
  #9  
Alt 10.07.2005, 01:05:14
swishy swishy ist offline
Anfänger
 
Registriert seit: Jul 2002
Ort: Landsberg
Beiträge: 45
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Zurück - ich bin Depp - is wohl schon zu spät, hab die falsche Zieldatei angegeben - jetzt klappt es!

Du bist echt ein php Gott - Danke - das hat mir voll weitergeholfen - Jetzt kann ich alles fertig machen dank dir. soll ich dich irgendwo im code erwähnen als mithelfer? - was sollt ich dann reinschreiben über dich?

Danke Danke Danke: Swishy
Mit Zitat antworten
  #10  
Alt 10.07.2005, 01:07:40
Benutzerbild von xabbuh
xabbuh xabbuh ist offline
SELFPHP Guru
 
Registriert seit: May 2003
Beiträge: 7.187
AW: Datei zeilenweise auslesen und bestimmte werte daraus extrarieren

Zitat:
Zitat von swishy
soll ich dich irgendwo im code erwähnen als mithelfer? - was sollt ich dann reinschreiben über dich?
Nene, lass mal. :-)
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Bestimmte Zeile aus .txt Datei auslesen Morph PHP für Fortgeschrittene und Experten 5 07.03.2005 20:32:48
Variablen in Datei übergeben und auslesen webdoing PHP Grundlagen 7 12.12.2003 15:07:47
Datei auslesen und in andere schreiben! Satherlor PHP Grundlagen 1 30.10.2003 19:45:31
Anfänger: Datei auslesen und Statistik erstellen EyeDacor PHP Grundlagen 4 18.08.2003 02:37:09
werte aus anderer php datei includieren Silencer PHP für Fortgeschrittene und Experten 1 06.05.2003 07:59:56


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:22:24 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.


© 2001-2021 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt