Bestimmte Tabellenzeile auslesen

Getting started ... Alles für einen gelungenen Start.
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Bestimmte Tabellenzeile auslesen

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Hallo zusammen,
ich habe folgendes Problem: Also zunächst mal ein Beispiel aus der tabelle, sonst ist das Problem schwer zu erklären:

Produktnummer____Eintragsnr____Text
123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj
123 _____________ 01 __________ <notiz>
123 _____________ 02 __________ test
123 _____________ 03 __________ </notiz>
145 _____________ 00 __________ 879897 shdghsjds
145 _____________ 01 __________ <notiz>
145 _____________ 02 __________ blubb
145 _____________ 03 __________ </notiz>
145 _____________ 04 __________ dshdjshjdhsj

So jetzt fragt bitte nicht warum die Tabelle so aufgebaut ist^^
Ich möchte daraus die Produktnummer, die Nummer aus dem Text sowie den Text der von <notiz> und </notiz> eingeschlossen ist. Also die Ausgabe soll dann so aussehen:

Produktnummer____Mitarbeiter_____Notiz
123 _____________ 548784 _______ test
145 _____________ 879897 _______ blubb


Ich habe dafür jetzt schon nach Substring-Funktionaliäten gesucht, aber das ist anscheinend nicht so einfach in ABAP. Zu dem ist das blöd mit der Notiz. Weil ich müsste ja eine Abfrage machen nach dem Motto: Selectiere die Zeilen wo <notiz> steht, kuck welche eintragsnummer das ist, addiere 1 und geb den text mit der um eins erhöhten eintragsnr aus(weil die notiz steht nicht immer in der zeile mit eintragsnr 02, da können noch weitere zeilen dazwischen liegen). Am besten wäre es wenn man prüfen könnte, dass er alle zeilen für notiz nehmen soll, die zwischen <notiz> und </notiz> liegen, aber keine ahnung wie ich das implementieren soll.
Oder habt ihr eine Idee, ich bin gerade etwas überfragt...

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Bestimmte Tabellenzeile auslesen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
Am besten wäre es wenn man prüfen könnte, dass er alle zeilen für notiz nehmen soll, die zwischen <notiz> und </notiz> liegen, aber keine ahnung wie ich das implementieren soll.
Ungefähr so:

Code: Alles auswählen.

delete itab where text eq '<notiz>' or text eq '</notiz>'.


Oder:

Code: Alles auswählen.

Loop at itab where text ne '<notiz>' or text ne '</notiz>'.

Re: Bestimmte Tabellenzeile auslesen

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Ja schön wärs :-)

Aber es gibt ja noch weitere zeilen. Bspw. mit der eintragsnr 04 ganz unten. Diese Zeile würde er ja dann mit ausgeben, soll er aber nicht.

Re: Bestimmte Tabellenzeile auslesen

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
also nur mal so gedacht, wenn du einen loop über die tabelle machst und dir ein hilfsfeld dazubaust, sollte das klappen.

Produktnummer____Eintragsnr____Text hilfsfeld
123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj
123 _____________ 01 __________ <notiz> X
123 _____________ 02 __________ test X
123 _____________ 03 __________ </notiz> X
145 _____________ 00 __________ 879897 shdghsjds X
145 _____________ 01 __________ <notiz> X
145 _____________ 02 __________ blubb X
145 _____________ 03 __________ </notiz> X
145 _____________ 04 __________ dshdjshjdhsj

quasi so :

loop at itab.
if Eintragsn ne '00'.
case text.
when '<notiz>'.
move 'X' to itab-hilfsfeld.
when ' </notiz>'.
clear itab-hilfsfeld.
endcase.

modify itab.

endif.

endloop.


dann sollten alle einträge die für dich relevant sind makiert sein. und der lästige 145 _____________ 04 __________ dshdjshjdhsj hätte dann kein X.
den kannst du ja dann löschen wie unit605 geschrieben hat. müsste eigentlich so funktionieren. ausser ich hab da nen denkfehler :)
<:: XING-Gruppe Tricktresor::>

Re: Bestimmte Tabellenzeile auslesen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Hi ratsnus,

irgendwie passt was nich. Du willst das Hilfsfeld clearen, wenn </notiz> vorliegt? Außerdem bleibt das Hilfsfeld nicht "angehakt", somit kriegt "blubb" gar kein X. Zudem verpasst du die Mitarbeiternummer in Zeile 1.

@ostpower: Sorry, aber bei so einem Aufbau wirst du um viel Handarbeit nicht herumkommen. Ich würde versuchen, die Tabelle zu durchloopen, mir die Daten aufzubereiten und mit AT NEW produktnummer oder AT END OF produktnummer meine Zeilen an eine neue ITAB anzuhängen.

Re: Bestimmte Tabellenzeile auslesen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Fällt mir grad noch ein:

Warum bildest du dir nicht Hilfstabellen? Quasi die Einträge je Produktnummer wie auch immer in eine eigene Tabelle selektieren/separieren, dann alles zu einem String concatenaten und dann diesen String wie gewünscht zerlegen.

Bsp:
123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj
123 _____________ 01 __________ <notiz> X
123 _____________ 02 __________ test X
123 _____________ 03 __________ </notiz> X

wird zu

548784 dsjhdjsh dhsjdhsj<notiz>test</notiz>

Vorteil: in dem String stehen dir alle Funktionen wie FIND, REPLACE, SHIFT, SPLIT etc. zur Verfügung.
Nachteil: Performance geht bei sehr großen ITABs eventuell in die Knie, wobei ich das nicht so recht glaube, wenns gescheit gemacht ist (LOOP ASSIGNING).

Re: Bestimmte Tabellenzeile auslesen

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
ich meinte doch wie man die Zeilen identifizieren könnte. das man die Mitarbeiternummer zeile rausbekommt davon gehe ich mal aus.
es ging doch eher darum die textzeilen zu identifizieren und nur die die relevant sind also zwischen notiz stehen.

man könnte so alle Zeilen identifizieren.

also mitarbeiternummer ist klar erkennt man an eintragsnummer.
notiz zeile an <notiz>
die zeilen wo man den text haben möchte hätten dann ein X
ende notiz an </notiz>

ob <notiz> nun da nen X hat und </notiz> kein X ist doch in dem Falle egal.

wichtig ist das die zeile 145 _____________ 04 __________ dshdjshjdhsj kein X hätte.

und für itab-hilfsfeld kann man auch nen flag nehmen, dann bleibt flag auch X bis ein </notiz> kommt.

loop at itab.
if Eintragsn ne '00'.
case text.
when '<notiz>'.
flag = 'X'.
when ' </notiz>'.
clear flag.
endcase.
move flag to itab-hilfsfeld.
modify itab.
endif.
endloop.

das ergebniss müsste dann so aussehen:
123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj_____________
123 _____________ 01 __________ <notiz>____________________________X
123 _____________ 02 __________ test_______________________________X
123 _____________ 03 __________ test_______________________________X
123 _____________ 04 __________ </notiz>___________________________
145 _____________ 00 __________ 879897 shdghsjds___________________
145 _____________ 01 __________ <notiz>____________________________X
145 _____________ 02 __________ blubb______________________________X
145 _____________ 03 __________ </notiz>___________________________
145 _____________ 04 __________ dshdjshjdhsj_______________________

jetzt löscht man alles raus was <notiz> oder </notiz> im Text hat, danach alle wo eintragsnummer ungleich 00 und kein X haben.
danach hat man dann doch :
123 _____________ 00 __________ 548784 dsjhdjsh dhsjdhsj_____________
123 _____________ 02 __________ test_______________________________X
123 _____________ 03 __________ test_______________________________X
145 _____________ 00 __________ 879897 shdghsjds___________________
145 _____________ 02 __________ blubb______________________________X
und das kann man doch dann schön aufbereiten.
<:: XING-Gruppe Tricktresor::>

Re: Bestimmte Tabellenzeile auslesen

Beitrag von casman (Specialist / 420 / 1 / 63 ) »
Das hört sich schon anders an... :)

Re: Bestimmte Tabellenzeile auslesen

Beitrag von ratsnus (Specialist / 357 / 2 / 56 ) »
:) ja das erste posting war quasi laut gedacht und dabei eingetippt.
<:: XING-Gruppe Tricktresor::>

Re: Bestimmte Tabellenzeile auslesen

Beitrag von Diko (ForumUser / 73 / 0 / 1 ) »
Hallo,

wie wär's damit.

REPORT ZPTESTFALL.
DATA: BEGIN OF TAB OCCURS 100,
F1(4) TYPE N,
F2(2) TYPE N,
F3(30) TYPE C,
END OF TAB.
DATA: BEGIN OF TAB1 OCCURS 100,
F1(4) TYPE N,
F2(6) TYPE N,
F3(30) TYPE C,
END OF TAB1.
DATA: TAB1_INDEX LIKE SY-TABIX.
DATA: MERK TYPE C.

START-OF-SELECTION.

PERFORM FILL_TAB USING '123' '00' '123456 hgwsfrk'.
PERFORM FILL_TAB USING '123' '01' '<notiz>'.
PERFORM FILL_TAB USING '123' '02' 'Text1'.
PERFORM FILL_TAB USING '123' '03' '<notiz>'.
PERFORM FILL_TAB USING '123' '04' 'adjadjas'.

PERFORM FILL_TAB USING '124' '00' '987654 hgwsfrk'.
PERFORM FILL_TAB USING '124' '01' '<notiz>'.
PERFORM FILL_TAB USING '124' '02' 'Text2'.
PERFORM FILL_TAB USING '124' '03' '<notiz>'.
PERFORM FILL_TAB USING '124' '04' 'adjadjas'.

LOOP AT TAB WHERE F2 = '00'.
MOVE TAB-F1 TO TAB1-F1.
MOVE TAB-F3+0(6) TO TAB1-F2.
APPEND TAB1. CLEAR TAB1.
ENDLOOP.

SORT TAB1.
SORT TAB.
LOOP AT TAB1 WHERE F2 <> '00'.
TAB1_INDEX = SY-TABIX.
LOOP AT TAB WHERE F1 = TAB1-F1.
IF TAB-F3 = '<notiz>'.
IF MERK = 'X'. CLEAR MERK. CONTINUE. ENDIF.
MERK = 'X'.
ENDIF.
IF TAB-F3 <> '<notiz>' AND MERK = 'X'.
MOVE TAB-F3 TO TAB1-F3.
MODIFY TAB1 INDEX TAB1_INDEX.
ENDIF.
ENDLOOP.
ENDLOOP.
LOOP AT TAB1.
WRITE: / TAB1-F1, TAB1-F2, TAB1-F3.
ENDLOOP.

END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form FILL_TAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0051 text
* -->P_0052 text
* -->P_0053 text
*----------------------------------------------------------------------*
FORM FILL_TAB USING VALUE(P_0051)
VALUE(P_0052)
VALUE(P_0053).
MOVE P_0051 TO TAB-F1.
MOVE P_0052 TO TAB-F2.
MOVE P_0053 TO TAB-F3.
APPEND TAB. CLEAR TAB.

ENDFORM. " FILL_TAB

Gruß

Diko

Re: Bestimmte Tabellenzeile auslesen

Beitrag von Unit605 (Expert / 975 / 37 / 93 ) »
ostpower hat geschrieben:Ja schön wärs :-)

Aber es gibt ja noch weitere zeilen. Bspw. mit der eintragsnr 04 ganz unten. Diese Zeile würde er ja dann mit ausgeben, soll er aber nicht.

Mein Beispiel/Tipp bezog sich auf Deinen Satz:
Am besten wäre es wenn man prüfen könnte, dass er alle zeilen für notiz nehmen soll, die zwischen <notiz> und </notiz> liegen, aber keine ahnung wie ich das implementieren soll.
Ich gebe hier grundsätzlich nur Tipps und Hinweise und kein fertiges Coding.

Re: Bestimmte Tabellenzeile auslesen

Beitrag von ostpower (ForumUser / 48 / 1 / 0 ) »
Ich habe zu diesem Thema eine ähnliche Baustelle, bei der ich eine interne Tabelle durchlaufe, und dann jede zeile nach bestimmten einträgen filtern muss. Also die einträge sehen etwa so aus:

fjshdfkjh
<komentar 1>
<eintrag typ1>
shdhjfd
</eintrag>
</kommentar>
<kommentar 2>
<eintrag typ 4>
djhjdhfjkdh
</kommentar>

Ich möchte jetzt alle Daten ausgeben, außer die tags zwischen drin, also ich bräuchte einen filter, der alles mit "<%" ignoriert, also nach dem motto: loop in die erste zeile, steht da was mit <...? ja dann geb es nicht aus, loop zeile 2, steht da was mit <...? nein, dann gebe es aus usw.


wie könnte ich das machen? ich komm nicht weiter

Seite 1 von 1

Vergleichbare Themen

7
Antw.
1592
Views
Tabellenzeile in Smartform anpassen
von L0w-RiDer » 01.09.2020 14:13 • Verfasst in ABAP® für Anfänger
4
Antw.
2032
Views
Statusanzeige in jeder Tabellenzeile
von vvursT » 30.11.2005 11:15 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
533
Views
Tabellenzeile in BRFplus hinzufügen
von msfox » 28.04.2022 08:51 • Verfasst in ABAP® Core
3
Antw.
3190
Views
Tabellenzeile aus einer Generische Tabelle löschen
von Gabriel99 » 08.04.2016 14:53 • Verfasst in ABAP® für Anfänger
1
Antw.
3760
Views
Ausgewählte Tabellenzeile eines Table View ermitteln?
von winfo » 08.05.2008 17:06 • Verfasst in Web-Dynpro, BSP + BHTML

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Regex in where
vor 12 Stunden von tar 8 / 300
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1589
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 238
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 475

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Regex in where
vor 12 Stunden von tar 8 / 300
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1589
Programm anlegen mit Vorlage
vor 2 Tagen von DeathAndPain 2 / 238
IT0024 Qualifikationen CP-ID
vor 2 Tagen von DeathAndPain 2 / 475

Unbeantwortete Forenbeiträge

BUSOBJEKT zu CMIS PHIO ermitteln
vor 2 Tagen von snooga87 1 / 177
aRFC im OO-Kontext
letzen Monat von ralf.wenzel 1 / 3354
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9906