String merging

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
14 Beiträge • Seite 1 von 1
14 Beiträge Seite 1 von 1

String merging

Beitrag von naratcis (ForumUser / 5 / 0 / 0 ) »
Hallo

Ich will aus 2 Strings einen machen, das ganze soll so aussehen:

String1: A C E G I K
String2: B D F H J L

String gemergt: A B C D E F G H I J K L


Ich will das ganze halt dynamisch machen, vielleicht mitem Shift Befehl, innerhalb von einem Loop?

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


Re: String merging

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Man könnte jeden der Strings in eine eigene itab splitten und durch die erste loopen und im loop mit dem sy-tabix einen read auf die zweite machen.

Man kann auch einfach eine Laufvariable in einer do-Schleife nehmen und sowas wie

Code: Alles auswählen.

clear: zahler, zielstring.

do.

concatenate
     zielstring
     quellstringA+zaehler(1)
   into zielstring.

concatenate
     zielstring
     quellstringB+zaehler(1)
   into zielstring.

add 1 to zaehler.

enddo.
Hier fehlt dann aber noch ne Abbruchbedingung -- die hab ich weggelassen weil ich nicht weiß, was du tun willst, wenn einer der zwei Quellstrings komplett ausgelesen ist, der andere aber noch nicht (also Länge QuellstringA ungleich Länge Quellstring B).


Ralf *was es alles für komische anforderungen gibt....
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: String merging

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
ralf.wenzel hat geschrieben:Man kann auch einfach eine Laufvariable in einer do-Schleife nehmen und sowas wie
Ralf war schneller, trotzdem noch ein lauffähiges Testprogramm:

Code: Alles auswählen.

DATA: g_string1 TYPE string,
      g_string2 TYPE string,
      g_erg     TYPE string,

      g_len1 TYPE i,
      g_len2 TYPE i,

      g_pos TYPE i.


PARAMETERS p_strg1 TYPE c LENGTH 1024 DEFAULT 'ACEGIK'.
PARAMETERS p_strg2 TYPE c LENGTH 1024 DEFAULT 'BDFHJL'.

START-OF-SELECTION.

* Strings übernehmen
g_string1 = p_strg1.
g_string2 = p_strg2.

* Länge der Strings übernehmen
g_len1 = STRLEN( g_string1 ).
g_len2 = STRLEN( g_string2 ).

DO g_len1 TIMES.

* Postion String bestimmen
 g_pos = sy-index - 1.

* Zeichen aus String1 übernehmen
  CONCATENATE g_erg
              g_string1+g_pos(1)
              INTO g_erg.

* Gibt es noch Zeichen in String2?
  IF sy-index <= g_len2.
    CONCATENATE g_erg
                g_string2+g_pos(1)
                INTO g_erg.
  ENDIF.
ENDDO.

* Wenn String2 länger als String1 dann hier noch den rest übernehmen
IF g_len1 < g_len2.
* Restlänge bestimmen
  g_pos = g_len2 - g_len1.

  CONCATENATE g_erg
              g_string2+g_len1(g_pos)
              INTO g_erg.
ENDIF.

* Ergebnis ausgeben
WRITE: / g_erg.
Gruß Hendrik

Beitrag von naratcis (ForumUser / 5 / 0 / 0 ) »
Vielen Dank für die Antworten, ich habe die Version von Hendrik benutzt und diese als solches auch noch ein bisschen erweitert.

Aber grundsätzlich ist es genau das was ich gesucht habe.

Danke nochmals!

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Naratcis,
versuchs mal mit folgendem Coding:

DATA: string1(30) type c value 'A C E G I K'.
DATA: string2(30) type c value 'B D F H J L'.

overlay string1+1 with string2.
write: /01 string1.

mfg dele

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Das Ergebnis würde mich interessieren.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von nikibert (ForumUser / 78 / 4 / 0 ) »
Moin,
ich glaube das Dele davon ausgeht das die Zeichen immer mit Leerschritt getrennt sind. Kann man ja hier nicht von ausgehen.
Falls ja, wäre das eine kurze, elegante Lösung!
Gruß Nikibert

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Leute,

war nur so eine Idee und gleich noch eine:

DATA: string1 type c length 30 value 'A C E GIK'.
DATA: string2 type c length 30 value 'BD FHIJKLMN'.

* condense string1 no-gaps. "==> wenn blanks irrelevant sind
* condense string2 no-gaps. "==> wenn blanks irrelevant sind

replace all occurrences of regex '(.{1,1})' in string1 with '$0@' .
replace all occurrences of regex '(.{1,1})' in string2 with '$0@' .

overlay string1+1 with string2 only '@'.

write: /01 string1.

mfg dele

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
Dele hat geschrieben:replace all occurrences of regex '(.{1,1})' in string1 with '$0@' .
replace all occurrences of regex '(.{1,1})' in string2 with '$0@' .

overlay string1+1 with string2 only '@'.
Ich hoffe, im Arbeitsleben kommentierst du deine Programme besser. Das werden eine Menge Entwickler nicht verstehen; die Welt ist voller ABAP-Programmierer, die mit (für deine Maßstäbe) sehr einfachen Mitteln arbeiten.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Hallo Ralf,

vielen Dank für Deine Kritik und Dein Lob.

Ich habe hier im Forum bereits einiges von Dir und über Dich gelesen.

Hier noch ein gut gemeinter Rat:
vielleicht würde Dich in Deinem Leben der Vers aus Sprüche 17,28 in der Bibel im alten Testament weiterbringen.

mfg dele

Beitrag von ralf.wenzel (Top Expert / 3935 / 200 / 281 ) »
*lol* Ein guter Beweis für ein Fehlen jeglicher Kritikfähigkeit. Ich mache diesen Job nun schon sehr lange und habe gelernt, so zu programmieren, dass alle meine Kunden die Programme auch warten konnten -- viele Entwickler beim Anwender kommen nicht sehr weit über Batch-Input-Mappen hinaus. Dementsprechend kommentiere ich so viel, wie nötig, damit auch ein weniger begabter Programmierer meine Konstrukte verstehen kann.

Soviel zum Hintergrund meiner Kritik.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Beitrag von black_adept (Top Expert / 4099 / 128 / 941 ) »
@ dele.

Kurz und effektiv.
Endlich mal ein Grund die F1-Hilfe zu den Regulären Ausdrücken anzuschauen, mit denen ich bisher so gut wie nix am Hut hatte.
Die RegExp '(.{1,1})' ist ja auch nicht allzu komplex aber der Ausdruck von dir zeigt doch schön die Mächtigkeit dieses Tools auf.

Frage - kann ich (.{1,1}) auch durch (.) ersetzen um es noch einfacher zu machen?

@ Ralf
Ralf hat geschrieben:Dementsprechend kommentiere ich so viel, wie nötig, damit auch ein weniger begabter Programmierer meine Konstrukte verstehen kann.
Wie immer man solche Aussagen bewerten möchte... Unter einem mangelnden Ego scheinst du ja nicht zu leiden.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
Dele hat geschrieben:replace all occurrences of regex '(.{1,1})' in string1 with '$0@' .
replace all occurrences of regex '(.{1,1})' in string2 with '$0@' .
Ab welchen Release gibt es den Zusatz regex '(.{1,1})' für den Replace Befehl? In einem ECC 5.0 gibt es einen Syntax-Fehler: Das Wort "REGEX" ist reserviert.
Gruß Hendrik

Beitrag von Dele (Specialist / 307 / 4 / 47 ) »
Frage - kann ich (.{1,1}) auch durch (.) ersetzen um es noch einfacher zu machen?
Ja, das geht auch.
Im Übrigen kann man mit dem Report DEMO_REGEX_TOY sehr gut reguläre Ausdrücke testen. Es gibt auch einige nette Freeware-Programme zum testen von regulären Ausdrücken (z.B. RegExCoach, RegExDisgner)

Die SAP-Doku ist auch nicht schlecht. Ansonsten findet man im Internet auch ziemlich viele gute Anleitungen.
Ab welchen Release gibt es den Zusatz regex '(.{1,1})' für den Replace Befehl? In einem ECC 5.0 gibt es einen Syntax-Fehler: Das Wort "REGEX" ist reserviert.
Weiß ich nicht genau - auf jeden Fall ab ECC 6.0.

mfg Dele

Seite 1 von 1

Vergleichbare Themen

3
Antw.
607
Views
CL_SALV_TABLE - Value Merging pro Gruppenstufe
von Nikolaz » 19.08.2021 10:08 • Verfasst in ABAP® für Anfänger
0
Antw.
1209
Views
ALV mit editierbarer Spalte und Merging
von mania999 » 05.02.2008 08:23 • Verfasst in ABAP Objects®
12
Antw.
3180
Views
CSV String
von Django90 » 02.10.2017 08:58 • Verfasst in ABAP® für Anfänger
5
Antw.
1991
Views
..als String aufbereiten
von supermario73 » 26.05.2008 19:44 • Verfasst in ABAP® für Anfänger
10
Antw.
5669
Views
Convert String to PDF
von Johannes9090 » 13.10.2014 17:15 • Verfasst in ABAP® für Anfänger

Aktuelle Forenbeiträge

Regex in where
vor einer Stunde von tar 8 / 176
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

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 einer Stunde von tar 8 / 176
Daten an Tabelle binden
Gestern von Bright4.5 3 / 1488

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 5 Wochen von ralf.wenzel 1 / 3261
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9822