gelöst Anführungszeichen in jedes Feld schreiben


Getting started ... Alles für einen gelungenen Start.

Moderatoren: Jan, Steff

gelöst Anführungszeichen in jedes Feld schreiben

Beitragvon L0w-RiDer » 07.02.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
L0w-RiDer
ForumUser
 
Beiträge: 54
Registriert: 26.10.2018, 09:52
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Sponsor

Alte ABAP-Entwicklerweisheit: Weißt du weder aus noch ein, baust du einen BADI ein

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon a-dead-trousers » 07.02.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 07.02.2019, 10:52, insgesamt 1-mal geändert.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
L0w-RiDer
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon a-dead-trousers » 07.02.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
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon schick » 07.02.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!
schick
ForumUser
 
Beiträge: 26
Registriert: 16.02.2018, 08:22
Dank erhalten: 4 mal
Ich bin: Berater/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon nickname8 » 07.02.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.
nickname8
ForumUser
 
Beiträge: 93
Registriert: 18.07.2015, 08:22
Dank erhalten: 12 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon DeathAndPain » 07.02.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.

Für diese Nachricht hat DeathAndPain einen Dank bekommen :
L0w-RiDer
DeathAndPain
Expert
 
Beiträge: 934
Registriert: 05.05.2006, 10:14
Dank erhalten: 218 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon schick » 07.02.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.
schick
ForumUser
 
Beiträge: 26
Registriert: 16.02.2018, 08:22
Dank erhalten: 4 mal
Ich bin: Berater/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon nickname8 » 07.02.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.

Für diese Nachricht hat nickname8 2 Dankeschön bekommen :
DeathAndPain, schick
nickname8
ForumUser
 
Beiträge: 93
Registriert: 18.07.2015, 08:22
Dank erhalten: 12 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon ewx » 07.02.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/
ewx
Top Expert
 
Beiträge: 3870
Registriert: 04.08.2003, 19:55
Wohnort: Schleswig-Holstein
Dank erhalten: 334 mal

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon L0w-RiDer » 07.02.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?
L0w-RiDer
ForumUser
 
Beiträge: 54
Registriert: 26.10.2018, 09:52
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon L0w-RiDer » 07.02.2019, 14:33

Mal eine Frage noch am Rande.

Was ist performanter der Check oder die If-Anweisung?
L0w-RiDer
ForumUser
 
Beiträge: 54
Registriert: 26.10.2018, 09:52
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon a-dead-trousers » 07.02.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.
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

Für diese Nachricht hat a-dead-trousers einen Dank bekommen :
L0w-RiDer
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon black_adept » 07.02.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.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Für diese Nachricht hat black_adept einen Dank bekommen :
a-dead-trousers
black_adept
Top Expert
 
Beiträge: 3184
Registriert: 08.01.2003, 13:33
Wohnort: Lehrte ( bei Hannover )
Dank erhalten: 553 mal
Ich bin: Freiberufler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon a-dead-trousers » 07.02.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
a-dead-trousers
Top Expert
 
Beiträge: 3156
Registriert: 07.02.2011, 13:40
Dank erhalten: 779 mal
Ich bin: Entwickler/in

Re: Anführungszeichen in jedes Feld schreiben

Beitragvon L0w-RiDer » 07.02.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?
L0w-RiDer
ForumUser
 
Beiträge: 54
Registriert: 26.10.2018, 09:52
Dank erhalten: 0 mal
Ich bin: Entwickler/in

Nächste

Zurück zu ABAP® für Anfänger

  Aktuelle Beiträge   
Adobe Forms - Download - Keine Seiten
vor 11 Stunden von shimsham 2 Antw.
UTF-8 mit Funktionsbaustein
vor 13 Stunden von a-dead-trousers 4 Antw.
gelöst Fehler SAVE NOT ALLOWED bei F4IF_START_VALUE_REQUEST
vor 10 Stunden von AdrianSchm 1 Antw.
SAP Logon bei Aufruf WebGUI
Gestern von msfox 0 Antw.
Formatierung Textdatei aus Query und ABAP
vor 13 Stunden von wreichelt 5 Antw.

  Ähnliche Beiträge beta
In Dynpro-Feld schreiben
14.09.2007, 21:12 von KleinerEisbaer 0 Antw.
Zwischensumme in interne Tabelle in neues Feld schreiben
27.04.2012, 11:32 von neptun277 3 Antw.
gelöst Feld sperren, wenn in and. Feld gerade etwas eingegeben wird
18.07.2018, 12:43 von a-dead-trousers 2 Antw.
Abhängige Werte (von Feld 1) in Feld 2 in Pflegetabelle
30.11.2006, 11:38 von k4lisp3r4 0 Antw.
In Materialstamm schreiben
06.06.2008, 11:46 von queen 2 Antw.

 

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]