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 ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken 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 Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 07.02.2013, 00:35:43
preg preg ist offline
Anfänger
 
Registriert seit: Jan 2013
Alter: 44
Beiträge: 10
Was tun, wenn implode() Zeilenumbrüche verursacht?

$test ist eine zweidimensionales Array.
PHP-Code:
foreach($test as $key => $value) {
        
$test[$key] = implode(''$test[$key]);
}
print_r($test); 
Die verursacht bei mir eine Ausgabe als:
Zitat:
Array
(
[0] => key0
value0

[1] => key1
value1

[2] => key2
value2
}
mit den Zeilenumbrüchen. Wenn ich dann mit implode('', $test); das ganze Array in einen String umwandle habe ich die Ausgabe
Zitat:
key0
value0
key1
value1
usw.
Wie bekomme ich die Zeilenumbrüche weg? Was mache ich falsch?

Meine Wunschausgabe ist
Zitat:
key0value0
key1value1 usw.
was ich eigentlich hoffte mit dem Loop oben und dann implode("\n", $test); zu erreichen.

Danke im voraus für jeden Hinweis!
Mit Zitat antworten
  #2  
Alt 07.02.2013, 01:27:55
preg preg ist offline
Anfänger
 
Registriert seit: Jan 2013
Alter: 44
Beiträge: 10
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Es funktioniert mit

PHP-Code:
for ($i 0$i count($test); $i++){
$test[$i] = str_replace( array("\n" "\r" ) , '' $test[$i] );
}
//Array zu String
$strimplode("\n"$test);
echo 
$str
... verstehe aber noch nicht wieso. In einem anderen Script hat implode keinerlei unerwünschte Zeilenumbrüche verursacht. ??
Mit Zitat antworten
  #3  
Alt 07.02.2013, 02:26:45
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Hi

was machst du da?
PHP-Code:
foreach($test as $key => $value) {
        
$test[$key] = implode(''$test[$key]);
}
//ist gleich
foreach($test as $key => $value) {
        
$test[$key] = implode(''$value);

Zeig mal dein $test array sonst raten wir hier rum wie das sein könnte!
Hinweis: implode fügt keine Zeilenumbrüche hinzu!
Wenn welche da sind sind die in dem Array/Daten.

mfg

CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #4  
Alt 07.02.2013, 13:49:57
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Zitat:
Zitat von Ckaos Beitrag anzeigen
Zeig mal dein $test array sonst raten wir hier rum wie das sein könnte!
Hinweis: implode fügt keine Zeilenumbrüche hinzu!
Wenn welche da sind sind die in dem Array/Daten.
Vermutlich isses wieder mal das Grundübel:
eine unter Windows erstellte Textdatei wird mit file() in ein Array geladen. Das Dumme daran ist, daß file() vom Windows Zeilenumbruch "\r\n" nur das "\n" entfernt. Somit klebt am Ende der Arrayelemente ein "\r".
Mit Zitat antworten
  #5  
Alt 07.02.2013, 19:57:22
preg preg ist offline
Anfänger
 
Registriert seit: Jan 2013
Alter: 44
Beiträge: 10
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Zitat:
Zitat von Ckaos Beitrag anzeigen
was machst du da?
Ich versuche eine einfaches Konvertierungsprogramm zu schreiben:
1. Datei in Array einlesen.
//Die Datei hat den Aufbau:
DelimiterDatensatznummer
FeldnameFeldinhalt
FeldnameFeldinhalt
DelimiterDatensatznummer
FeldnameFeldinhalt
FeldnameFeldinhalt
usw.
2. Das Array mehrdimensional machen mit [n][0] ist Feldname und [n][1] ist Feldinhalt
3. Eine weitere Datei mit einer Feldkonkordanz in eine Array lesen
//Aufbau:
alter_Feldbezeichung irgendeinDelimiter neue_Feldbezeichnung
4. Dann mit verschachtelten Loops die alten Feldnamen aus Array1 mit den alten Feldnamen aus Array2 (die Konkordanz) abgleichen und im Trefferfall mit neuer Feldbezeichnung aus Array2 ersetzen
5. Das ganze wieder implodieren und in eine neue Datei schreiben.


Wenn ich nur einen Datensatz habe, geht das wunderbar. Das Problem trat in diesem Fall erst nach implode() auf und konnte mit
PHP-Code:
for ($i 0$i count($mab); $i++){
$Array1[$i] = str_replace( array("\n" "\r" ) , '' $Array1[$i] );

gelöst werden.

Nun tritt das Problem von vorneherein auf.

Als ich nur einen Datensatz hatte, also nur einmal
//DelimiterDatensatznummer
//FeldnameFeldinhalt
//FeldnameFeldinhalt
war meinArray1 durchgehend zweidimensional. Mit mehreren Datensätzen musste ich es dreidimensional machen, und jetzt hilft weder
array_walk($meinArray, 'myfunc') mit trim noch rtrim noch str_replace zwecks Entfernens von \n und \r noch sonst irgendwas.


Zitat:
Zitat von meikel Beitrag anzeigen
Vermutlich isses wieder mal das Grundübel:
eine unter Windows erstellte Textdatei wird mit file() in ein Array geladen. Das Dumme daran ist, daß file() vom Windows Zeilenumbruch "\r\n" nur das "\n" entfernt. Somit klebt am Ende der Arrayelemente ein "\r".
Yep. Windows. Texteditor.


Minimalbeispiel ist ein bisschen schwierig, da das ganze sehr lang ist (Anfänger ...).
Aber man soll ja auch zur allgemeinen Unterhaltung beitragen... :) Here goes:
Zitat:
Array
(
[###
] => ###

[001
] => neuer_Feldname

[002a
] => neuer_Feldname

[003
] => neuer_Feldname
usw.
Hier sieht man das Problem am besten. Irgendwie entsteht innerhalb des Keys ein Zeilenumbruch (oder was auch immer). Meine Versuch mit trim usw. scheinen nicht zu funzen. Das ganze ist das Ergebnis von folgendem Code. (Dies ist nicht exakt die oben beschriebene Vorgehensweise, das war eine neuer Versuch, hier sieht man es nur besser.)
PHP-Code:
<pre>
<?php
include("parameter.htm");

$mab file("mab_mehrere_DS.html");

//zählt die Anzahl der Datensätze in $mab
$regex '/^###/';
$count 0;
$anfangszeilen = array();
for (
$i 0$i count($mab); $i++){
         if (
preg_match($regex$mab[$i], $matches) == 1){
         
$count++;
         
//legt alle gefundenen Zeilen in einem Array ab
         
$anfangszeilen[$count-1]= $i;
         }
}
//echo  $count . "<br />";   //Anzahl der gefundenen Datensätze
//print_r($anfangszeilen);
//teilt $mab in Subarrays mit je einem Datensatz auf
for ($i 0$i $count$i++){
         if(
$i == 0){
         
$datensatzlaenge $anfangszeilen[$i+1];
         }
         else {
         
$datensatzlaenge $anfangszeilen[$i]- $anfangszeilen[$i-1];
         }
         for (
$j 0$j $datensatzlaenge$j++){
         
$newarray[$i][$j] = $mab[$j];
         }
}
$mab $newarray;
//print_r($mab);
$mab_kopie $mab;

//ersetzt jeweils ab dem 5. Zeichen mit leerem String
function CutAb5BisEnde(&$item)
{
$suchmuster '/^(.{4})(.+$)/';
$ersetzung '$1';
$item preg_replace($suchmuster$ersetzung$item);
}
array_walk($mab'CutAb5BisEnde');
//print_r($mab);
//ersetzt die erstem vier Zeichen mit leerem String
function CutEinsBisVier(&$item2) {
$suchmuster2 '/(?:^.{4})(.+)$/';
$ersetzung2 '$1';
$item2 preg_replace($suchmuster2$ersetzung2$item2);
}
array_walk($mab_kopie'CutEinsBisVier');
//print_r($mab_kopie);
//erzeugt das dreidimensionale Array
for ($i 0$i count($mab); $i++){
         if(
$i == 0){
         
$datensatzlaenge $anfangszeilen[$i+1];
         }
         else {
         
$datensatzlaenge $anfangszeilen[$i]- $anfangszeilen[$i-1];
         }
         for (
$j 0$j $datensatzlaenge$j++){
         
$mab[$i][$j]  = array($mab[$i][$j], $mab_kopie[$i][$j]);
         }
}
//print_r($mab);  //$mab ist jetzt das dreidimensionale Ergebnisarray zur Weiterarbeit


//Konkordanz einlesen
$konkordanz file("Konkordanz.inc.php");
$konkordanz_kopie $konkordanz;
//print_r($konkordanz);
//ersetzt jeweils ab dem 5. Zeichen mit leerem String
array_walk($konkordanz'CutAb5BisEnde');
//print_r($konkordanz);
//ersetzt die erstem vier Zeichen mit leerem String
array_walk($konkordanz_kopie'CutEinsBisVier');
function 
CutColons(&$item3) {
$suchmuster3 '/::[\s]{0,100}/';
$ersetzung3 '';
$item3 preg_replace($suchmuster3$ersetzung3$item3);
}
array_walk($konkordanz_kopie'CutColons');
//print_r($konkordanz_kopie);
//setzt die Elemente von $konkordanz als keys für die Werte von $konkordanz_kopie
$konkordanz array_combine($konkordanz$konkordanz_kopie);
print_r($konkordanz); //Das hier erzeugt die Ausgabe die oben steht
?>
</pre>
Und ja, ich weiß tl;dr...

Danke, falls jemand beim Überfliegen einen Tipp hat!

Vielen Dank euch beiden!

Geändert von preg (07.02.2013 um 20:10:50 Uhr)
Mit Zitat antworten
  #6  
Alt 07.02.2013, 20:14:31
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Zitat:
Zitat von meikel Beitrag anzeigen
Vermutlich isses wieder mal das Grundübel:
eine unter Windows erstellte Textdatei wird mit file() in ein Array geladen. Das Dumme daran ist, daß file() vom Windows Zeilenumbruch "\r\n" nur das "\n" entfernt. Somit klebt am Ende der Arrayelemente ein "\r".
Soweit mir bekannt entfernt file() weder das eine, noch das andere.
(zumindest nicht freiwillig)
Mit Zitat antworten
  #7  
Alt 08.02.2013, 08:25:01
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Soweit mir bekannt entfernt file() weder das eine, noch das andere.
(zumindest nicht freiwillig)
Stimmt:
http://mod.php.developer.vc/crlf/ (Quelltext wird angezeigt)
Mit Zitat antworten
  #8  
Alt 09.02.2013, 02:19:20
preg preg ist offline
Anfänger
 
Registriert seit: Jan 2013
Alter: 44
Beiträge: 10
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Wow. Danke! Muss ich mir mal in Ruhe ansehen, will ja was lernen ...
Mit Zitat antworten
  #9  
Alt 09.02.2013, 10:17:44
Ckaos Ckaos ist offline
Member
 
Registriert seit: Nov 2007
Beiträge: 843
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Hi

zeig uns doch mal bitte einen "richtigen" Ausschnitt aus deiner Datei(die du einliest!).
Denn sonst raten wir hier weiter...
z.B.
Zitat:
DelimiterDatensatznummer
FeldnameFeldinhalt
FeldnameFeldinhalt
DelimiterDatensatznummer
FeldnameFeldinhalt
FeldnameFeldinhalt
gleich
Code:
### 001
Artnr 0000001
Preis 7799
### 002
Artnr 0000002
Preis 799
Warum ist das wichtig?
Weil ich denke das es eine bessere Lösung für dich gibt als die die du verfolgst.
Kurz, dein Problem ist nicht implode sondern dein Ansatz.
Das mit den umbrüchen könntest du ja so lösen:
PHP-Code:
$text "###\r\n001\n002\r";
echo 
$text;
$sParam = array("\r\n","\r","\n");
echo 
str_replace($sParam,'',$text); 
Du hast aber vielleicht die Möglichkeit deine ganze Datei per LOAD DATA und den richtigen Parametern in eine DB einzulesen(Geschwindigkeit) oder sie per REGEX
beim einlesen im richtigen Format zu haben.
Bsp (Ratebsp) LOAD DATA
Code:
LOAD DATA local INFILE 'deineDatei' INTO TABLE DeineTabelle
	FIELDS TERMINATED BY "\r\n" 
	ENCLOSED BY '\"' 
	LINES TERMINATED BY '###'
REGEX -> schau mal preg_split

mfg
CKaos
__________________
"Wenn die Leute Häuser so bauen würden, wie wir Programme schreiben, würde der erstbeste Specht unsere Zivilisation zerhacken."
In den allermeisten Fällen sitzt der Bug etwa 40 cm vor dem Monitor!
Mit Zitat antworten
  #10  
Alt 10.02.2013, 01:46:31
preg preg ist offline
Anfänger
 
Registriert seit: Jan 2013
Alter: 44
Beiträge: 10
AW: Was tun, wenn implode() Zeilenumbrüche verursacht?

Wow, CKaos, danke!!

Dein Beispiel
Zitat:
### 001
Artnr 0000001
Preis 7799
### 002
Artnr 0000002
Preis 799
ist genau, was ich meinte. Meine Datei sieht so aus:
Zitat:
### 00889nM2.01000024 h
001 00012645125
002a19890315
910 00001427539
912 |Humanbiologie
usw., mehrere Datensätze dieser Art von unterschiedlicher Länge, wobei immer die ersten vier Zeichen dem Feldname entsprechen.

Mit der Hilfe von Meikels Vorgehen beim Einlesen der Datei funktioniert es jetzt wunderbar. Vielen Dank!
Ich hätte noch ein paar Fragen zu
Zitat:
Zitat von meikel Beitrag anzeigen
http://mod.php.developer.vc/crlf/ (Quelltext wird angezeigt)
Was sind denn die Konstanten PE, PB und HR?
Ist NL = NewLine in Unix bzw. außerhalb von Windows? Habe ich überall mit LF ersetzt. Dann gehts.
(Ich bekam Fehlermeldungen für nicht definierte Konstanten.)


CKaos, ich werde mich so bald es geht mit deinen Anmerkungen beschäftigen, da ich im Echtfall mit größeren Dateien zu tun habe, Performance also auch ein Faktor ist (und auch die Ersetzungsoperationen komplizierter sein können als nur "ersetze alten Feldnamen durch neuen"). Datenbank klingt gut, habe ich aber mit php noch nicht gemacht. Vielen Dank!
Mit Zitat antworten
Antwort

Stichworte
implode(), zeilenumbrüche


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

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
NOT IN (" . implode(',', $symbol_id2).") Riegelhaus PHP Grundlagen 3 30.11.2009 01:38:26
Zeilenumbrüche via Formular in MySQL erzwingen Nightstalker MySQLi/PDO/(MySQL) 5 09.11.2007 12:09:32
implode geht im IE nicht theresa PHP Grundlagen 2 03.10.2007 09:51:51
Zeilenumbrüche JoeJoeMaker PHP Grundlagen 1 02.02.2004 15:14:41
Textarea + Zeilenumbrüche + 'böser' HTML Code = Problem BlindCrazyBoy PHP für Fortgeschrittene und Experten 1 10.04.2003 18:01:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 07:08:33 Uhr.


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


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