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

Arrays rekursiv ausgeben

Mitglied: netstorm

netstorm (Level 1) - Jetzt verbinden

29.01.2006, aktualisiert 14.02.2006, 11223 Aufrufe, 7 Kommentare

Hallo,

ich habe folgendes Problem. Ich bekomme aus einem Stück Software, das nicht von mir geschrieben ist ein Array, das nicht "genormt" ist. Das bedeutet, es kann wiederum Arrays enthalten oder Werte. Darin befindliche Arrays können auch wieder Arrays enthalten usw. Also zum Beispiel sowas:

('a', ('a','b'), (('b',('a','c'),'f'),'d','e'), 'a')

Ich möchte diese Werte jetzt alle auslesen und ausgeben. Und zwar wenn möglich rekursiv. Dabei will ich das dann in einer brauchbaren Form ausgeben, z.B.

a
-a
-b
--b
---a
---c
--f
-d
-e
a

Das mit der Ausgabe ist kein Problem, wenn ich weiß, wie ich rekursiv die Werte auslesen kann. Im Grunde würde es mir schon helfen, wenn ich wüßte, wie ich entscheiden kann, ob da jetzt ein Array drin steckt oder ein Wert.Hoffe es kann mir jemand helfen.

CIAO thorsten
Mitglied: problemsolver
30.01.2006 um 14:05 Uhr
Hallo!

wenn ich das richtig verstehe, bekommst du von deiner Software einen String dieser Art als Text geliefert: (Exportdatei oder Ähnliches)
('a', ('a','b'), (('b',('a','c'),'f'),'d','e'), 'a')

Wenn Du nur wissen möchtest, ob mindestens ein Array drin ist, so muss du schauen ob innerhalb des Strings folgender String drin vorkommt: ", ("
(Die Umsetzung lässt sich mit jeder Programmiersprache eigentlich umsetzen.)

Beispiel VB: (andere auf Anfrage)
ergebnis = InStr(DeinStringAusDemProgramm, ", (", vbTextCompare)

Wenn das Ergebnis > 0 ist dann kommt mindestens ein Array drin vor. (Bitte evtl. andere auftretbare Fehler durch die Programmierung abfangen)

Hoffe ich konnte helfen...

Gruß

M.
Bitte warten ..
Mitglied: netstorm
30.01.2006 um 14:21 Uhr
Hallo,

leider ist es nicht so einfach. Ich bekomme keinen String sondern wirklich die Datenstruktur Array. Mein Beispiel oben sollte nur verdeutlichen, wie ein solches Array aussehen könnte (mit Subarrays etc.). Was ich machen möchte ist folgendes:

- Lese ersten Eintrag aus dem Array
- Ist es ein Wert?
- Wenn ja: ausgeben
- Wenn nein (dann ist es ein subarray): gehe mit dem Array in Rekursion.
- Lese nächsten Eintrag
- ...

CIAO Thorsten
Bitte warten ..
Mitglied: Biber
30.01.2006 um 15:29 Uhr
Moin netstorm,

Lese ersten Eintrag aus dem Array
>>- Ist es ein Wert?
>>- Wenn ja: ausgeben
>>- Wenn nein (dann ist es ein subarray): gehe mit dem Array in Rekursion.
>>- Lese nächsten Eintrag

Ich würde die Logik genau umgekehrt machen,
Überprüfen, oder der gelesene n-te Eintrag aus der ersten Ebene des Arrays ein Arrayelement [0] hat.
Wenn ja, ist es erstens ein Array und Du kannst zweitens die Länge dieses Unterarray ermitteln. Und dann rekursiv rumschrapeln.
print "Arrayelement 0 existiert, also ist ein Array.\n" if exists $array[ $index ][0];
$size = @array[ $index ][0];
print "Größe Sub-Array: $size.\n";

HTH Biber
Bitte warten ..
Mitglied: Guenni
01.02.2006 um 18:02 Uhr
@netstorm

Hi,

ich würde selber mal versuchen, ein solches Array zu initialisieren, vielleicht kommst du
dann weiter.

array[Anzahl]
subarray[Anzahl]

subarray[0]="Ein Text"
subarray[1]="Ein weiterer Text"

Mit array[0]=subarray würdest du dem ersten Eintrag in array das subarray komplett
zuweisen.

Gesetz den Fall, dass das gelingt, wie würdest du bei einer Ausgabe das subarray
ansprechen?

Print array[0] würde nichts ausgeben, da kein Wert da ist.
Print array[0][0] würde auch nichts ausgeben, da ich hier array als zweidimensionale
Matrix anspreche, aber nicht das subarray.

Richtiger wäre z.B. eine mehrdimensionale Matrix:
array[Anzahl][Anzahl][Anzahl]

array[0][0][0]=Wert
array[0][0][1]=Wert2
usw.

Also ich bin alleine mit der Initialisierung auf keinen grünen Zweig gekommen.

Zu deiner Frage nach rekursiv:

Rekursiv wäre eine Funktion, die sich selber mit in ihr sich ändernen Parametern aufruft.

Also:

function machwas(parameter){
if bedingung return machwas(parameter +1);
else return 1;
}

Gruß
Günni
Bitte warten ..
Mitglied: 6890
13.02.2006 um 12:07 Uhr
hallo erstma

also da ich denke das du die sache in perl lösen möchtest war ich mal so nett und hab dir ne lösung gemacht wi du mehrdeminsionale arrays in perl auslesen kannst (also alles was drin steht) :

<pre>
#!c://perl/bin/perl

use strict;

## array mit subarrays
my @array = ('erster wert',
['zweiter wert', 'mit unterwert'],
'dritter wert',
['vierter wert',['unterwert1', 'unterwert2']],
'fuenfter wert',
);

&print_array(@array);


## routine zum auflösen des arrays
sub print_array {
my @array = @_;
foreach (@array) {
&print_array(@$_) if $_ =~ "ARRAY";
next if $_ =~ "ARRAY";
print $_ . "\n";
}
}
</pre>

ok is jetzt ni mit formatierung und so aber erstmal löst es das ganze array inkl. unterarrays auf!

also kurze erklärung:
<blockquote>
1. die routine geht jedes element im array durch
2. befindet sich im array eine referenz auf ein anderes array (kurz gesagt ein "subarray") dann geht es für das referenzierte array die routine durch
3. ausgeben der einzelnen array elemente außer die array referenzen
</blockquote>

ohh gott ich weiß schwer verständlich aber ich hoffe ihr kapierts trotzdem!!
wie gesagt das wäre meine lösung in perl!!

hoffe ich konnte helfen
mfg godlike P
Bitte warten ..
Mitglied: Guenni
13.02.2006 um 21:11 Uhr
@Godlike P

Hi,

ich habe gerade deinen Beitrag gelesen, weil ich meinen eigenen Kommentar
etwas korrigieren wollte, zwar nicht in Perl, sondern ich wollte ein Script
aus einem PHP-Buch zitieren, in dem es auch um verschachtelte Arrays geht.

Leider behandelt dieser Artikel auch nur die Ausgabe. Was mich interessiert,
wie kann man ein solches Array, z.B. per FOR-Schleife mit Werten belegen.

for......
Array[0]=Wert okay.
Array[1]=Wert
okay
Array[1]= //????



Also: Array[0] ist "nur" ein Wert, Array[1] soll einen Wert zugewiesen bekommen UND
ein SubArray, so habe ich die Fragestellung verstanden.

Wie würde dieses Subarray angesprochen bzw. initialisiert?

Gruß
Günni
Bitte warten ..
Mitglied: 6890
14.02.2006 um 13:07 Uhr
also:

in perl is das so, das mann mehrdeminsionale arrays nur über referenzen (in C/C++ pointer also variablen die auf einen speicherbereich zeigen) erstellen kann.

würdes du dir also ein array erstellen das so ausieht:
<pre>
my @array = ('erster wert',
['zweiter wert', 'mit unterwert'],
'dritter wert',
['vierter wert',['unterwert1', 'unterwert2']],
'fuenfter wert',
);
</pre>

und würdest dann einfach print "@array"; machen dann würde :
<pre>
erster wert ARRAY(0x15d50b8) dritter wert ARRAY(0x15d4fd4) fuenfter wert
</pre>
herauskommen.

würdest du also $array[1] printen würde darin ARRAY(0x15d50b8) (eine referenz auf einen speicher) drinstehen.

du müßtest es also wenn du es als array ansprechen möchtest mit @{$array[1]} ansprechen.
möchtest du ein einzelnen wert aus dem unterarray ansprechen kannst du das so tun: $array[1][1]. (ich weiß klingt am anfang komisch)

Initialisieren könntest du es zum beispiel so:
<pre>
my @array1;
$array1[0] = "hallo";
$array1[1][0] = "wqas";
$array1[1][1] = "wieso";
</pre>

hoffe ich konnte helfen
mfg godlike P
Bitte warten ..
Ähnliche Inhalte
PHP

Umstrukturierung eines Arrays anhand einer rekursiven Funktion umstrukturieren

gelöst Frage von joekerPHP5 Kommentare

Hallo, ich u.a. folgende Arrays in einer (ziemlich flachen) Hierarchie: Array1: Array( 4042 => Array ( level2 => 10 ...

Visual Studio

Verschachtelte Arrays

gelöst Frage von MarcoBornVisual Studio19 Kommentare

Hallo Forum, ich habe in VB.NET 6 Arrays, die alle dieselbe Länge, aber unterschiedliche Datentypen haben. Array1 ist vom ...

Windows Server

Arrays vergleichen mit Powershell

gelöst Frage von SlainteMhathWindows Server5 Kommentare

Moin, ich sitze hier vor einen Problem mit Powershell, das mich schier wahnsinnig macht. Hintergrund: Die auf einem Windows ...

Batch & Shell

Irfanviev rekursiv starten

gelöst Frage von Nightowl71Batch & Shell5 Kommentare

hallo zusammen, bisher habe ich diese befehlsfolge im freecommander genutzt Y:\IrfanView\i_view32.exe "D:\test /thumbs /filepattern="*001*"" (mit eingabe, das ich die ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate
Meine Wissenssammlung zu Bitlocker
Erfahrungsbericht von DerWoWusste vor 37 MinutenVerschlüsselung & Zertifikate

Die Motivation für diesen Beitrag waren die vielen Posts rund um dieses Thema, die deutlich machen, wie viele Einzelaspekte ...

E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 2 TagenE-Mail11 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 2 TagenHyper-V

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 2 TagenSicherheits-Tools1 Kommentar

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Heiß diskutierte Inhalte
Tipps & Tricks
Nagstamon und PRTG Monitoring
Frage von Der.ITlerTipps & Tricks13 Kommentare

Hallo Ihr, heute am Sonntag bin ich mal früh aufgestanden um mich mit dem Problem von Gestern zu beschäftigen. ...

Windows 10
Windows 10 PC stürzt in letzter Zeit mit verschiedenen Fehlermeldungen ab (Bluescreen)
Frage von cyb012Windows 1010 Kommentare

Hallo zusammen, mein Rechner verabschiedet sich in letzter Zeit leider immer öfters. Meine Austattung, falls relevant: Arbeitsspeicher: 16GB G.Skill ...

Batch & Shell
Bestimmte Textpassagen via bat löschen
gelöst Frage von Grisu84Batch & Shell10 Kommentare

Hallo, ich habe eine txt-Datei, in welcher ich durch eine bat bestimmte Zeilen löschen möchte. So soll die Datei ...

Datenschutz
Gilt ein Ransomware-Befall als Datenpanne nach DSGVO?
Frage von MOS6581Datenschutz9 Kommentare

Moin Kollegen, wenn sich jemand Ransomware einfängt und dadurch bspw. Kundendaten verschlüsselt werden; gilt dies dann als meldepflichtige Datenpanne ...