PDA

View Full Version : Felder über Namen aus einer Tabelle ansprechen



malzusrex
20-10-08, 14:34
Hallo Liebes Forum,

ist folgendes möglich:

Ich habe eine Datei mit dem Satzformat Datei1F. Da gibt es dann die Felder: FELD1, FELD2, FELD3, usw.
Nun lese ich mir in einer Tabelle die Feldnamen der Datei ein. Gibt es nun eine Möglichkeit, die felder über die Tabelle anzusprechen?

so in etwa:
f(1) = 'FELD1'
f(2) = 'FELD2'

Read Datei1

Eval Kundenname = f(1)
anstelle von Eval Kundenname = FELD1

ich hoffe ich habe mich verständlich rüber gebracht

Gruß
Ronald

Fuerchau
20-10-08, 14:57
Nunja, das Thema hatten wir in ähnlicher Version schon mal, da gings um DSPF-Felder.
Namen werden durch den Compiler bereits in Adressen aufgelöst, so dass die Namen nicht mehr zur Verfügung stehen.
Desweiteren legt der Compiler auch die Ausprägung eines Feldes fest, so dass der entsprechende Move/Eval/Add usw. mit dem richtigen Typ umgeht.

Wenn du F(1) mit dem entsprechenden Inhalt füllst dann geht das so.

Die andere Variante ist SQL und die Verwendung einer SQLDA mit einer Tabelle von Strukturen mit SQL-Type, Längeninfo und Adresse eines Puffers.

Aber auch hier hilft dir der EVAL dann nicht weiter, da du schnell Pufferüberschreibungen und Laufzeitfehler bekommst.

Für sowas ist eher Java der richtige Kandidat, selbst mit C++ gibts da etwas Schwierigkeiten.

malzusrex
20-10-08, 15:06
Okay, das Thema mid den DSPF habe ich am Rnade verfolgt.
Dann werde ich mir wohl mit einer Kopierorgie weiter helfen. Ich dachte ich bekomme auf dieser Art es hin, das ich aus eine PF eine Export-File hin bekomme, der in der 1.Zeile die Feldnamen hat, und dann halt pro Satz eine Zeile, wo die Feldinhalte dann mit Semikolon getrennt sind. Da mein Aufbereiten der Kopfzeile funktioniert, werde ich halt die Daten dan mit COPYTOIMPF ins IFS kopieren und mit nen bissel hin und her kopieren die Kopfzeile davor setzen. Ich dachte ich kann das in eine Programm erledigen.
Danke trozdem
Ronald

Fuerchau
20-10-08, 15:08
Der CPYTOIMPF kann ja auch Daten anhängen MBROPT(*ADD).
Du brauchst also per Programm nur die Kopfzeile erstellen, den Rest machst du wie bisher.

malzusrex
20-10-08, 15:29
Ja klar,
manchmal sieht man den wald vor Bäumen nicht!!!!!!


Danke

Ronald

E305GL
10-11-08, 17:02
Ja klar,
manchmal sieht man den wald vor Bäumen nicht!!!!!!


Danke

Ronald
hallo ronald: der einfachste weg um beliebige Stellen eines datensatzes unabhängig von seinen felddefinitionen anzusprechen ist die datei als programminterne zu verarbeiten (z.b. über feldgruppe)

holgerscherer
10-11-08, 18:15
Ja klar,
manchmal sieht man den wald vor Bäumen nicht!!!!!!


Man denkt einfach zu scharf nach, das kann störend sein. Übrigens kann das gute alte Net.Data das schön, relativ relativ referenzieren auf Variablennamen, bis zum bitteren Verwirrtsein.

$A = "TEST"
$B = "123"
$TEST123 ="hallo"

fragt man nun $($(A)$(B)) ab, erhält man "hallo".
Nur das Debuggen ist etwas haarig <g>

-h

Spateneder
10-11-08, 19:04
Hallo,
ich habe vor Jahren mal einige Artikel über eine Sammlung von nützlichen Serviceprogrammen (RPG-Toolkit) für NEWSolutions übersetzt.
Mit einigen der darin enthaltenen Funktionen habe ich einen Command und ein RPG-Programm gebastelt, mit dem man flexibel in CSV und ähnliche Formate kopieren kann (mit Feldauswahl, zusätzlichen Kopf- und Fußzeilen und mit Spaltenüberschriften wahlweise aus Feldnamen, COLHDG oder Beschreibungstext).
Bei Bedarf kann ich es zur Verfügung stellen.
Grüße
Mathias Spateneder

Fuerchau
10-11-08, 22:57
@Holger
Bei interpretativen Sprachen ist sowas leicht möglich, neben NET.DATA gehöhren da auch noch PHP, Java, REXX u.v.a.m. dazu.
RPG ist nun mal im weitesten Sinn Maschinencode und da wird quasi nix mehr interpretiert.
In .NET (VB.NET, C#, J#) sowie VB6 oder Java gibts dann allgemeine Variablen vom Typ Object/Variant, die nun mal alles beinhalten können.
Hinzu wird noch mit Collections und Array's (und Ableitungen) gearbeitet, die eben über einen Index als Nummer oder Schlüssel bearbeitet werden.
Dadurch kann ich eben beliebige Listen führen (sortiert, verkettet oder sonstwas), die eben meine Variablen dynamisieren.
Sogar für C++ stehen entsprechende Klassen (MFC, ATL, STL, usw.) zur Verfügung, um solche Dinge abzubilden.
Aber nicht umsonst kennt man da auch das Problem der "Memory-Leaks", was mit den Garbage-Collectoren versucht wird zu minimieren (beheben geht nicht).

Wer das in ILERPG machen will, bricht sich garantiert sämtliche Knochen, da allein die Sprache eben keine Objekte oder Klassen unterstützt.
Spätestens beim FileIO (auch beim embedded SQL) wirds dann wieder tragisch, wenn man sein komplexes Speichermodell wieder auflösen muss.
Selbst mit CLI ist das nicht so ganz einfach.

Nicht umsonst verwendet man bei allen Interpretersprachen jede Menge Standardklassen, die einem eben diese Basisarbeit abnehmen.