Anführungszeichen in jedes Feld schreiben

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 (ForumUser / 97 / 10 / 1 ) » 7. Feb 2019 10:33

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


Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 3199 / 81 / 792 ) » 7. Feb 2019 10:49

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 7. Feb 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.07
Basis: 7.40

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von a-dead-trousers (Top Expert / 3199 / 81 / 792 ) » 7. Feb 2019 10:51

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.07
Basis: 7.40

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von schick (ForumUser / 28 / 3 / 5 ) » 7. Feb 2019 11:40

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 / 102 / 14 / 12 ) » 7. Feb 2019 12:08

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 / 1014 / 115 / 223 ) » 7. Feb 2019 12:23

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 / 28 / 3 / 5 ) » 7. Feb 2019 13:09

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 / 102 / 14 / 12 ) » 7. Feb 2019 13:10

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 / 3918 / 160 / 349 ) » 7. Feb 2019 13:32

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 (ForumUser / 97 / 10 / 1 ) » 7. Feb 2019 14:11

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 (ForumUser / 97 / 10 / 1 ) » 7. Feb 2019 14:33

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 / 3199 / 81 / 792 ) » 7. Feb 2019 14:47

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.07
Basis: 7.40

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von black_adept (Top Expert / 3217 / 54 / 559 ) » 7. Feb 2019 14:50

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 / 3199 / 81 / 792 ) » 7. Feb 2019 14:58

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.07
Basis: 7.40

Re: Anführungszeichen in jedes Feld schreiben

Beitrag von L0w-RiDer (ForumUser / 97 / 10 / 1 ) » 7. Feb 2019 16:22

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?

Seite 1 von 2 (current) Nächste

Aktuelle Forenbeiträge

In einer Methode auf Rangetabelle zugreifen
vor 6 Stunden von DeathAndPain 5 / 74
Elstam: IDnr mehrfach für die Personalnummer
vor 8 Stunden von missforgotten 6 / 280
Steuerprüfer GDPDU - Daten rutschen um eine Zeile
vor 8 Stunden von missforgotten 1 / 19
OBN im NWBC ohne Popup
Gestern von msfox 2 / 54
Business Partner Konzept
Gestern von waltersen 4 / 293

Unbeantwortete Forenbeiträge

Steuerprüfer GDPDU - Daten rutschen um eine Zeile
vor 8 Stunden von missforgotten 1 / 19
MD14 Felder einblenden Umsetzung Planauftrag
Gestern von Thomas R. 1 / 30
Verursachervormerkung OCM manuell anlegen
vor einer Woche von Aba 1 / 131
Auflösen MILL_OC - Auftragszusammenfassung
vor 2 Wochen von tofralu 1 / 115