Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: chb1982

chb1982 (Level 2) - Jetzt verbinden

29.10.2008, aktualisiert 02.11.2008, 2578 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
DNS

DNS in AD - .domäne.int automatisch auffüllen?

gelöst Frage von Fr4nkiDNS3 Kommentare

Hallo Zusammen, in unserem AD gibt es ein merkwürdiges Phänomen. Wir nehmen jetzt einfach mal an, dass wir die ...

Batch & Shell

Leere Array-Werte aus einem Array entfernen

gelöst Frage von ToniHoBatch & Shell3 Kommentare

Hallo zusammen, ich bin dabei ein Powershell-Script zu schreiben, welches diverse Reports generieren kann. Für die Eingabe von SamAccountNames ...

JavaScript

Javascript Array

gelöst Frage von internet2107JavaScript2 Kommentare

Ich habe folgendes Problem. Ersetze ich die folgenden Zahlen gegen Variablenwerte, bekomme ich nicht das Ergebnis, wie mit festen ...

Batch & Shell

Array oder Object oder wie soll ich das machen

gelöst Frage von Druide83Batch & Shell4 Kommentare

Hallo, mal wieder verzweifelt. Wahrscheinlich ist die Lösung einfach, aber ich habe gerade keinen Kopf mehr zum klar denken. ...

Neue Wissensbeiträge
Vmware
VMware Update für den ESXi 5.5 verfügbar
Information von sabines vor 18 StundenVmware

Nach dem ganzen Hickhack um Update mit Microcode Anpassungen und Rückzug, gibt es nun für den ESXi 5.5 ein ...

CPU, RAM, Mainboards

Meltdown und Spectre: Intel zieht Microcode-Updates für Prozessoren zurück

Information von keine-ahnung vor 22 StundenCPU, RAM, Mainboards5 Kommentare

Moin, extrem lutztig. Nur gut, dass ich noch nicht beim Probanden-Bingo mitgemacht habe :-) LG, Thomas

Router & Routing
PfSense als Addon auf QNAP
Information von magicteddy vor 1 TagRouter & Routing7 Kommentare

Moin, für Spielereien eine ganz nette Idee aber ich fürchte das soetwas auch als echte Firewall genutzt wird: In ...

Datenschutz

Teamviewer kommt für IoT-Geräte wie den Raspberry Pi

Information von magicteddy vor 1 TagDatenschutz1 Kommentar

Moin, jetzt werden IoT Geräte endgültig zur Wanze? Anscheinend kann man auf einem Dashboard seine Geräte visualisieren Ich stelle ...

Heiß diskutierte Inhalte
Netzwerkmanagement
Preis für Wartungsvertrag ok?
gelöst Frage von a-za-zNetzwerkmanagement26 Kommentare

Hallo! Mal ne Frage, weil ich mich mit dem akzeptablen Preis für einen Reaktionszeitvertrag nicht auskenne. Meine Firma hat ...

Windows Server
TEMP-Profile
gelöst Frage von Forseti2003Windows Server21 Kommentare

Guten Morgen, wer kennt sie nicht, die lieben Temporären Benutzerprofile, vorallem immer dann, wenn man sie am wenigsten braucht. ...

Multimedia & Zubehör
Welches Tablet für die Verkäufer?
Frage von Hendrik2586Multimedia & Zubehör16 Kommentare

Guten Morgen meine Lieben, vielleicht könnt ihr mir ja helfen. Es geht um unsere Außendienstmitarbeiter /Verkäufer. Sie sollen demnächst ...

Ubuntu
Ubuntu - Routing mit 2 Netzwerkkarten?
Frage von gabrixlUbuntu13 Kommentare

Hei Folgende Situation: Ich habe zwei virtuelle Maschinen: 1 - Server für DHCP, DNS und Routing - Netzwerkkarte 1: ...