Anführungszeichen in jedes Feld schreiben

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
17 Beiträge • Seite 1 von 2 (current) Nächste
17 Beiträge Seite 1 von 2 (current) Nächste

Anführungszeichen in jedes Feld schreiben

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Hallo,

ich hätte mal eine kurze Frage und zwar:

Ich habe eine interne Tabelle lt_ausgabe mit 10 Felder. Diese interne Tabelle wird mit Werten gefüllt.

Nun möchte ich in jedes Feld der internen Tabelle vor dem Wert und nach dem Wert ein Anführungszeichen schreiben, also so auf die Art:

"577893" oder "Gutschrift". Falls ein Feld leer ist, soll in dieses auch die Anführungszeichen geschrieben werden.

Hat dort jemand eine gute Idee wie man das umsetzt? Oder kennt jemand einen Funktionsbaustein?

Danke.

Gruß

L0w-Rider

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


Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Sofern alle Felder CLIKE sind und du nicht jedes Feld "extra" behandeln möchtest:

Code: Alles auswählen.

loop at lt_ausgabe assigning field-symbol(<ls_ausgabe>).
do.
  assign component sy-index of structure <ls_ausgabe> to field-symbol(<ld_feld>).
  if sy-subrc ne 0.
    exit. "DO-Schleife verlassen
  endif.
  concatenate '"' <ld_feld> '"' into <ld_feld>.
enddo.
endloop.
Zuletzt geändert von a-dead-trousers am 07.02.2019 10:52, insgesamt 1-mal geändert.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
L0w-RiDer

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Es geht auch ohne das "unschöne" exit:

Code: Alles auswählen.

loop at lt_ausgabe assigning field-symbol(<ls_ausgabe>).
clear sy-subrc. "Nur zur Sicherheit
while sy-subrc eq 0.
  assign component sy-index of structure <ls_ausgabe> to field-symbol(<ld_feld>).
  if sy-subrc eq 0.
    concatenate '"' <ld_feld> '"' into <ld_feld>.
  endif.
endwhile.
endloop.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von schick (ForumUser / 52 / 5 / 15 ) »
a-dead-trousers hat geschrieben:Es geht auch ohne das "unschöne" exit:

Code: Alles auswählen.

loop at lt_ausgabe assigning field-symbol(<ls_ausgabe>).
clear sy-subrc. "Nur zur Sicherheit
while sy-subrc eq 0.
  assign component sy-index of structure <ls_ausgabe> to field-symbol(<ld_feld>).
  if sy-subrc eq 0.
    concatenate '"' <ld_feld> '"' into <ld_feld>.
  endif.
endwhile.
endloop.
Hi a-d-t,

kannst du mir erklären, warum du die Zeile "CLEAR sy-subrc." an der Stelle eingebaut hast?
Ich verstehe den Sinn dahinter nicht ganz.
Danke!

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
Weil vorher vielleicht irgendwas gemacht wurde was den sy-subrc auf ungleich 0 gesetzt hat.
Bin mir nicht sicher, ob bei einem loop ohne where-Bedingung der auf 0 gesetzt wird.

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von DeathAndPain (Top Expert / 1944 / 257 / 413 ) »
Ich würde vermuten, dass der SY-SUBRC auf 0 stehen muss, weil der LOOP ja eine Zeile gefunden hat. (Hätte er keine gefunden, dann würde er gar nicht bei dem CLEAR ankommen, weil er dann das Schleifeninnere nicht ausführen würde.) Aber ich würde auch entweder zur Sicherheit den CLEAR schreiben oder in einen kleinen Testprogramm klären, ob ich damit auch wirklich richtig liege.

Die WHILE-Schleife finde ich gut. Ich wusste gar nicht, dass WHILE auch den SY-INDEX hochzählt, obwohl WHILE-Schleifen ja eigentlich keine Zählschleifen sind. Jetzt muss nur noch der hässliche IF weg: :D

Code: Alles auswählen.

loop at lt_ausgabe assigning field-symbol(<ls_ausgabe>).
  clear sy-subrc. "Nur zur Sicherheit
  while sy-subrc eq 0.
    assign component sy-index of structure <ls_ausgabe> to field-symbol(<ld_feld>).
    check sy-subrc eq 0.
    concatenate '"' <ld_feld> '"' into <ld_feld>.
  endwhile.
endloop.

Folgende Benutzer bedankten sich beim Autor DeathAndPain für den Beitrag:
L0w-RiDer


Re: Anführungszeichen in jedes Feld schreiben

Beitrag von schick (ForumUser / 52 / 5 / 15 ) »
DeathAndPain hat geschrieben:Ich würde vermuten, dass der SY-SUBRC auf 0 stehen muss, weil der LOOP ja eine Zeile gefunden hat. (Hätte er keine gefunden, dann würde er gar nicht bei dem CLEAR ankommen, weil er dann das Schleifeninnere nicht ausführen würde.)
Das ist genau das was ich auch vermuten würde, deswegen meine Nachfrage an a-d-t.

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von nickname8 (Specialist / 134 / 17 / 19 ) »
DeathAndPain hat geschrieben:Ich würde vermuten, dass der SY-SUBRC auf 0 stehen muss, weil der LOOP ja eine Zeile gefunden hat.
Mein Gedanke war, dass er ja nichts sucht (keine WHERE-Bedingung) und daher auch sy-subrc ignoriert.
Was er unter 7.02 auch tatsächlich macht:

Code: Alles auswählen.

DATA lt_mara TYPE TABLE OF mara.
DATA ls_mara TYPE mara.

SELECT * UP TO 10 ROWS
  FROM mara CLIENT SPECIFIED
  INTO TABLE lt_mara.

WRITE sy-subrc.

sy-subrc = 4.

WRITE / sy-subrc.

LOOP AT lt_mara INTO ls_mara.
  WRITE / sy-subrc.
ENDLOOP.
Output ist:
0
4
4
usw....

Also ohne Where wird sy-subrc ignoriert. Wieder was gelernt.

Aus der SAP-Hilfe zu LOOP:
LOOP AT lässt sy-subrc unverändert. Nach dem Verlassen der Schleife über ENDLOOP wird sy-tabix auf den Wert gesetzt, den es vor dem Eintritt in die Schleife hatte, und für sy-subrc gilt:
sy-subrc Bedeutung
0 Die Schleife wurde mindestens einmal durchlaufen.
4 Die Schleife wurde nicht durchlaufen.

Folgende Benutzer bedankten sich beim Autor nickname8 für den Beitrag (Insgesamt 2):
schickDeathAndPain


Re: Anführungszeichen in jedes Feld schreiben

Beitrag von ewx (Top Expert / 4848 / 311 / 642 ) »
L0w-RiDer hat geschrieben: Nun möchte ich in jedes Feld der internen Tabelle vor dem Wert und nach dem Wert ein Anführungszeichen schreiben, also so auf die Art:

"577893" oder "Gutschrift". Falls ein Feld leer ist, soll in dieses auch die Anführungszeichen geschrieben werden.
Das willst du sehr wahrscheinlich nicht!
Du möchtest eine CSV-Datei erstellen.
Dein Vorhaben funktioniert aus zwei Gründen nicht:
1. Was machst du, wenn das Feld nur numerische Werte zulässt?
2. Was machst du, wenn der Feldwert so lang ist, wie die maximal zulässige Feldlänge?

Eine Zeile einer CSV-Datei ist in der Regel ein String in dem die in Anführungszeichen gesetzte Werte durch {Komma|Semikolon|...} getrennt aneinandergefügt werden.
"577893","Gutschrift","EUR","123,45"

Das passiert aber in der Ausgabestruktur und nicht in dem jeweiligen Wertfeld!

Schau dir mal die Funktionen von Klasse cl_rsda_csv_converter an:
https://www.tricktresor.de/blog/umwandl ... uktur-csv/

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Super! Vielen Dank schon mal :D.

Nun, habe ich nur noch ein kleines Problem und zwar, in einem Feld steht z.B. und dieses steht leider nicht am Anfang sondern erst ziemlich weit außen. also in dem Feld etwa 4290.00- so. Also erst einige Leerzeichen und dann kommt der Wert. Die Schleife löscht leider immer das Minus-Zeichen und hört danach auf. Wie könnte ich das beheben?

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
Mal eine Frage noch am Rande.

Was ist performanter der Check oder die If-Anweisung?

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
L0w-RiDer hat geschrieben:Was ist performanter der Check oder die If-Anweisung?
Innerhalb von Schleifen der CHECK.

Code: Alles auswählen.

DATA:
  ld_index TYPE i,
  ld_start TYPE i,
  ld_end   TYPE i.

GET RUN TIME FIELD ld_start .

DO 1000 TIMES.
  CLEAR ld_index.
  DO.
    ADD 1 TO ld_index.
    CHECK ld_index EQ 50.
    exit.
  ENDDO.
ENDDO.

GET RUN TIME FIELD ld_end .

NEW-LINE.
SUBTRACT ld_start from ld_end.
WRITE ld_end.

GET RUN TIME FIELD ld_start .

DO 1000 TIMES.
  CLEAR ld_index.
  DO.
    ADD 1 TO ld_index.
    IF ld_index EQ 50.
      EXIT.
    ENDIF.
  ENDDO.
ENDDO.

GET RUN TIME FIELD ld_end .

NEW-LINE.
SUBTRACT ld_start from ld_end.
WRITE ld_end.
Vermutlich, weil ABAP eine interpretierte Sprache ist und die ENDIF nicht verarbeiten muss.

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
L0w-RiDer

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von black_adept (Top Expert / 4089 / 127 / 940 ) »
L0w-RiDer hat geschrieben:Mal eine Frage noch am Rande.
Was ist performanter der Check oder die If-Anweisung?
Für alle praktischen Anwendungen: Keins.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
a-dead-trousers

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 4395 / 223 / 1182 ) »
Mich hat es nur interessiert das überhaupt mal auszutesten. 8)
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von L0w-RiDer (Expert / 535 / 83 / 2 ) »
hmmm vielleicht noch zu meiner ersten Frage, weiß jemand wie wie ich den Wert eines Feldes an den Anfang von dem Feld setze?

Ein Feldinhalt steht erst nach sehr vielen Leerzeichen drin und auch mit einem Minus-Zeichen davor. Die Schleife sorgt leider dafür, dass das Minus-Zeichen gelöscht wird und nur einmal ein Anführungszeichen reingeschrieben wird und danach die restlichen Felder auslässt. Hat da jemand eine Idee?

Vergleichbare Themen

0
Antw.
1698
Views
In Dynpro-Feld schreiben
von KleinerEisbaer » 14.09.2007 22:12 • Verfasst in ABAP® für Anfänger
6
Antw.
3356
Views
ALV / Subtotal-Feld / Schreiben
von Gast » 02.11.2005 10:47 • Verfasst in ABAP® Core
1
Antw.
1542
Views
Unicode-Zeichen in Feld schreiben
von ralf.wenzel » 27.05.2015 13:07 • Verfasst in ABAP® Core
3
Antw.
8304
Views
Zwischensumme in interne Tabelle in neues Feld schreiben
von neptun277 » 26.04.2012 15:59 • Verfasst in ABAP® für Anfänger
5
Antw.
3816
Views
Das Erbenis als .CSV-Trennung mit Anführungszeichen
von rafaelvives » 18.11.2013 07:37 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

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

Aktuelle Forenbeiträge

User Exit EXIT_RQCPRM10_001
vor 51 Minuten von Manfred K. 1 / 21
Trennen Strasse und Hausnummer
vor 2 Stunden von payten 13 / 10303
Dialog-Container mit Toolbar/Status
vor 16 Stunden von DeathAndPain gelöst 22 / 3233
Daten an Tabelle binden
vor 21 Stunden von Lukas Sanders 2 / 1092

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

User Exit EXIT_RQCPRM10_001
vor 51 Minuten von Manfred K. 1 / 21
Trennen Strasse und Hausnummer
vor 2 Stunden von payten 13 / 10303
Dialog-Container mit Toolbar/Status
vor 16 Stunden von DeathAndPain gelöst 22 / 3233
Daten an Tabelle binden
vor 21 Stunden von Lukas Sanders 2 / 1092

Unbeantwortete Forenbeiträge

User Exit EXIT_RQCPRM10_001
vor 51 Minuten von Manfred K. 1 / 21
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2653
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9241