Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Array bei Bedarf Auffüllen

Frage Entwicklung PHP

Mitglied: chb1982

chb1982 (Level 2) - Jetzt verbinden

29.10.2008, aktualisiert 02.11.2008, 2563 Aufrufe, 1 Kommentar

Moin,

ich hoffe hier nimmt sich jemand die Zet sich meinem Problem anzunehmen.
Unten ist ein kleines Script, das die Ausgabe von mehreren Spalten in eine Zusammenfasst.
In der Ausgangsdatei sind x Datensätze pro Auftragsnummer ($arKomPos[8]) und zwar so viele wie es Satzarten gibt ($arKomPos[33])

Die Ursprungstabelle sieht vereinfacht so aus:

Nummer - Satzart - Wert EK - Wert VK
4711 - 101 - 109,20 - 240, 30
4711 - 105 - 209,20 - 240, 30
4711 - 110 - 309,20 - 240, 30

4712 - 104 - 109,20 - 240, 30
4712 - 110 - 209,20 - 240, 30
4712 - 130 - 309,20 - 240, 30

Ziel soll sein jede Auftragsnummer in eine Zeile zu packen. Also

4711 - 101 - 109,20 - 105 - 209,20 - 110 - 309,20

Das bekommt das Script auch ganz toll hin.

Und jetzt kommt der Punkt.
Es gibt die Satzarten von 101 bis 130 durchgehend, aber sie werden nicht immer verwendet. Wenn sie nicht verwendet werden, sollen die Spalten mit 0 ausgegeben werden. Und das bekomme ich einfach nicht hin.

Anhand des Beispiels soll es also so aussehen.

4711 - 101 - 109,20 - 102 - 0 - 103 - 0 - 104 - 0 - 105 - 209,20


Kann mir jemand auf die Sprünge helfen wie ich das hinbekomme? Ich stehe schon am Rand der Verzweiflung!

Gruß
Christoph

Hier nun der Code

<?php
function convert_KomPos ($filename){
$last_kom = 0; Hilfsvariable Gruppenwechsel
$first_run = 1;
Satzarten
100, 101, 102, 103, 104, 110, 120, 121, 122, 124, 130, 131, 140

$x=1;

$fp=fopen("$filename","r");
$arKomSum=array();
while($arKomPos = fgetcsv($fp,8000,",")) {

$arKomSum[$arKomPos[8]][$arKomPos[33]][KomNr] = $arKomPos[8];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomSArt] = $arKomPos[33];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomEk.$arKomPos[33]] = $arKomPos[34] + $arKomSum[$arKomPos[8]][$arKomPos[33]][KomEk.$arKomPos[33]];
$arKomSum[$arKomPos[8]][$arKomPos[33]][KomVk.$arKomPos[33]] = $arKomPos[35] + $arKomSum[$arKomPos[8]][$arKomPos[33]][KomVk.$arKomPos[33]];
for($x=0;$x<33;$x++) {
$arKomSum[$arKomPos[8]][$arKomPos[33]][$x] = $arKomPos[$x];
}


}

$fp_write=fopen("kompos_hor.csv","w");

foreach($arKomSum as $temp1) {
Jede Kommissionsnummer
asort($temp1);
foreach($temp1 as $temp) { Jede Satzart
if($last_kom != $temp[KomNr]) {
for($x=0;$x<33;$x++) {
echo " - " . $temp[$x] . " ";
fwrite($fp_write, $temp[$x] . ",");
}
echo " KommNr:" . $temp[KomNr] . " SArt:" .$temp[KomSArt] . " EK:" . $temp[KomEk.$temp[KomSArt]] . " VK:" .$temp[KomVk.$temp[KomSArt]];
fwrite($fp_write, $temp[KomNr] ."," . $temp[KomSArt] . "," . $temp[KomEk] . "," . $temp[KomVk].",");
$last_kom = $temp[KomNr];
}
else {
echo " SArt:" .$temp[KomSArt] . " EK:" . $temp[KomEk.$temp[KomSArt]] . " VK:" .$temp[KomVk.$temp[KomSArt]];
fwrite($fp_write, $temp[KomSArt] . "," . $temp[KomEk] . "," . $temp[KomVk] . ",");
$last_kom = $temp[KomNr];
}
}
echo "<br><br>";
fwrite($fp_write, "\n");
}
fclose($fp_write);


}
?>
Mitglied: Guenni
02.11.2008 um 12:47 Uhr
Hi Christoph,

ehrlich gesagt, blicke ich durch dein Script nicht durch, zumal du noch
eine Funktion convert_KomPos definiert hast, die aber im Script
nirgends aufgerufen wird :-O.
Hab' das Problem (hoffentlich) mal wie folgt gelöst.

01.
<? 
02.
/* 
03.
Datei auftrag.txt zeilenweise einlesen, Beispiel: 
04.
4711-101-109,20-240,30 
05.
4711-105-209,20-240,30 
06.
4711-110-309,20-240,30 
07.
4712-104-109,20-240,30 
08.
4712-110-209,20-240,30 
09.
4712-130-309,20-240,30 
10.
4713-101-23,90-35,90 
11.
4713-110-101,90-139,90 
12.
4810-103-120,90-155,70 
13.
Hinweis: KEINE LEERZEILEN ZWISCHEN DEN AUFTRÄGEN 
14.
*/ 
15.
$handle=fopen("auftrag.txt","r"); 
16.
while($line=fgets($handle)){ 
17.
 $lines[]=$line
18.
19.
fclose($handle); 
20.
/* 
21.
Jede Zeile als Array in einem Array ablegen 
22.
Die Elemente der Arrays können dann mit Hilfe 
23.
der folgenden Konstanten angesprochen werden 
24.
z.B.: array[index][SATZ]; array[index][EK] etc. 
25.
*/ 
26.
foreach($lines as $line){ 
27.
 $arr[]=explode("-",$line); 
28.
29.
/* 
30.
Einige Konstanten, um die Indexe der Arrays anzusprechen 
31.
*/ 
32.
define('AUFTRAG',0); 
33.
define('SATZ',1); 
34.
define('EK',2); 
35.
define('VK',3); 
36.
/* 
37.
Die Auftragsnummern in ein Array ablegen und doppelte 
38.
Auftragsnummern entfernen 
39.
*/ 
40.
foreach($arr as $el){ 
41.
 $nr[]=$el[AUFTRAG]; 
42.
43.
$nr=array_unique($nr); 
44.
/* 
45.
Es existiert nun ein Array mit einmaligen Auftragsnummern 
46.
Die Arrays im Array $arr können nun mit den Auftragsnummern 
47.
angesprochen werden, die Elemente der Arrays mit den Konstanten 
48.
*/ 
49.
$i=0; 
50.
foreach($nr as $el){ 
51.
 $j=101; 
52.
 $auftrag="AuftragsNr: ".$el
53.
 while($arr[$i][AUFTRAG]==$el){ 
54.
  while($j<131){ 
55.
		/* 
56.
		Wenn die SatzNr eines Arrays $j entspricht, werden SatzNr und EK an 
57.
		$auftrag angehangen. $i wird um 1 erhöht, um das nächste Array zu prüfen 
58.
		$j wird nicht verändert, da ja jedes Array eine eigene SatzNr hat. 
59.
		Innerhalb dieser Schleife wird also $j durchgezählt bis 130, $i aber nur solange 
60.
		die Bed. $arr[$i][AUFTRAG]==$el zutrifft. 
61.
		*/ 
62.
    if($arr[$i][SATZ]==$j){ 
63.
		 $auftrag.="-".$arr[$i][SATZ]."-".$arr[$i][EK]; 
64.
		 $i++; 
65.
		}else
66.
					//$auftrag.="-".$j."-0"
67.
					/* 
68.
					Zur Abkürzung der Zeile wird hier nur die Null ohne SatzNr angehangen 
69.
					*/ 
70.
					$auftrag.="-0"
71.
72.
		$j++; 
73.
74.
75.
 /* 
76.
 Auftragszeile mit Zeilenende in ein Array ablegen 
77.
 */ 
78.
 $auftraege[]=$auftrag."\n"
79.
80.
echo "Testausgabe der Auftragszeilen<pre>"
81.
print_r($auftraege); 
82.
echo "</pre>"
83.
/* 
84.
Auftraege in Datei schreiben 
85.
*/ 
86.
$handle=fopen("pub/auftrag.txt","w"); 
87.
foreach($auftraege as $auftrag){ 
88.
 fwrite($handle,$auftrag); 
89.
90.
fclose($handle); 
91.
?>
Gruß
Günni
Bitte warten ..
Ähnliche Inhalte
PHP
gelöst PHP - unique-array() und sort() (14)

Frage von ThomasXYZ zum Thema PHP ...

Batch & Shell
gelöst Zeilen in TXT mit Leerzeichen auf eine bestimmte Länge auffüllen (4)

Frage von stingray14k zum Thema Batch & Shell ...

Batch & Shell
Powershell Import Computer aus csv in array und Befehl abarbeiten (4)

Frage von Robbi666 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Verschieben von Servergespeicherten Profilen an einen anderen Speicherort

Erfahrungsbericht von Enriqe zum Thema Windows Server ...

Windows 10

Plattformdienst für unbekannte Geräte (7023)

Tipp von KMUlife zum Thema Windows 10 ...

Administrator.de Feedback

Umgangsformen auf der Seite

(16)

Information von Frank zum Thema Administrator.de Feedback ...

Heiß diskutierte Inhalte
Windows Server
Windows Server Komplettspiegelung (16)

Frage von pdiddo zum Thema Windows Server ...

Batch & Shell
gelöst Dir tc Befehl unter Windows 10 macht Probleme (14)

Frage von sugram zum Thema Batch & Shell ...

Windows Server
Windows Server 2016 RDS Remoteapp Anzeigefehler (11)

Frage von qlnGenius zum Thema Windows Server ...