Mustafa HAMIT

ABAP’ta En Sık Kullanılan String İşlemleri (Temel Seviye ve Pratik Örnekler)

ABAP’ta rapor, arayüz, dosya işlemleri veya veri temizleme (data cleansing) yaparken en çok ihtiyaç duyulan şeylerden biri string işlemleridir. Bu yazıda başlangıç seviyesinde en sık kullanılan komutları kısa ve uygulanabilir örneklerle göreceğiz:

  • CONCATENATE ve string template (|...|)
  • SPLIT
  • CONDENSE
  • SHIFT
  • REPLACE
  • TRANSLATE
  • STRLEN
  • FIND mantığı

Örnek setup: String değişkenlerimizi hazırlayalım

REPORT z_demo_string_01.

DATA: lv_text  TYPE string,
      lv_text2 TYPE string.

lv_text  = '  ABAP   string   islemleri  '.
lv_text2 = 'Mustafa.Hamit@example.com'.

Not: string tipi dinamik uzunluktadır. Başlangıç için çoğu metin işinde en rahat tiptir.


1) Birleştirme (Concatenate): CONCATENATE ve String Template

CONCATENATE

DATA lv_full TYPE string.

CONCATENATE 'Merhaba' 'Dünya' INTO lv_full SEPARATED BY space.
WRITE: / lv_full.  "Merhaba Dünya

String Template (modern ve çok pratik)

DATA(lv_name) = 'Mustafa'.
DATA(lv_city) = 'Istanbul'.

DATA(lv_msg) = |Merhaba { lv_name }, sehir: { lv_city }.|.
WRITE: / lv_msg.

Neden template? Okunması daha kolaydır ve araya değişken eklemek çok rahattır.


2) Parçalama (Split): SPLIT

En sık kullanım: e-mail, dosya yolu, CSV satırı gibi verileri parçalamak.

DATA: lv_email  TYPE string VALUE 'mustafa.hamit@example.com',
      lv_user   TYPE string,
      lv_domain TYPE string.

SPLIT lv_email AT '@' INTO lv_user lv_domain.

WRITE: / 'User  :', lv_user.
WRITE: / 'Domain:', lv_domain.

Birden fazla parçayı internal table’a almak:

DATA: lv_csv   TYPE string VALUE 'A;B;C;D',
      lt_parts TYPE STANDARD TABLE OF string.

SPLIT lv_csv AT ';' INTO TABLE lt_parts.

LOOP AT lt_parts INTO DATA(lv_part).
  WRITE: / lv_part.
ENDLOOP.

3) Boşluk temizleme: CONDENSE

CONDENSE metindeki gereksiz boşlukları temizlemek için kullanılır.

DATA lv_dirty TYPE string VALUE '  ABAP   string   islemleri  '.

CONDENSE lv_dirty.
WRITE: / lv_dirty.  "ABAP string islemleri

Tüm boşlukları tamamen kaldırmak istersen:

DATA lv_no_space TYPE string VALUE 'A B   C'.

CONDENSE lv_no_space NO-GAPS.
WRITE: / lv_no_space.  "ABC

4) Sola/sağa kaydırma ve kırpma: SHIFT

Başta/sonda istenmeyen karakterler olduğunda işe yarar.

DATA lv_code TYPE string VALUE '0000123456'.

SHIFT lv_code LEFT DELETING LEADING '0'.
WRITE: / lv_code.  "123456

Sağ taraftaki boşlukları atmak gibi:

DATA lv_text3 TYPE string VALUE 'ABAP     '.

SHIFT lv_text3 RIGHT DELETING TRAILING space.
WRITE: / lv_text3.  "ABAP

5) Değiştirme: REPLACE

İlk bulduğunu değiştirme

DATA lv_url TYPE string VALUE 'http://site.com'.

REPLACE FIRST OCCURRENCE OF 'http://' IN lv_url WITH 'https://'.
WRITE: / lv_url.  "https://site.com

Hepsini değiştirme

DATA lv_text4 TYPE string VALUE 'a-b-c-d'.

REPLACE ALL OCCURRENCES OF '-' IN lv_text4 WITH '/'.
WRITE: / lv_text4.  "a/b/c/d

İpucu: Büyük/küçük harf duyarlılığı senaryoya göre değişir. Gerekirse önce TRANSLATE ile normalize edebilirsin.


6) Büyük/küçük harf dönüşümü: TRANSLATE

DATA lv_case TYPE string VALUE 'AbAp'.

TRANSLATE lv_case TO UPPER CASE.
WRITE: / lv_case.  "ABAP

TRANSLATE lv_case TO LOWER CASE.
WRITE: / lv_case.  "abap

7) Uzunluk alma: STRLEN

DATA lv_len TYPE i.
DATA lv_val TYPE string VALUE 'ABAP'.

lv_len = strlen( lv_val ).
WRITE: / 'Length:', lv_len.  "4

8) İçeriyor mu? FIND / substring kontrolü

Bir string içinde belirli bir kelime geçiyor mu kontrolü çok yaygındır.

DATA lv_text5 TYPE string VALUE 'ABAP string islemleri'.

FIND 'string' IN lv_text5.
IF sy-subrc = 0.
  WRITE: / 'Bulundu'.
ELSE.
  WRITE: / 'Bulunamadi'.
ENDIF.

Bulunan pozisyonu almak istersen:

DATA lv_offset TYPE i.

FIND 'string' IN lv_text5 MATCH OFFSET lv_offset.
WRITE: / 'Offset:', lv_offset.

9) Pratik mini örnek: Dosya adını temizleme ve standartlaştırma

Diyelim kullanıcı dosya adını şöyle veriyor:

  • Baş/son boşluk var
  • Aralarda çok boşluk var
  • İçinde “-” var, sen “_” istiyorsun
  • Büyük harf istiyorsun
REPORT z_demo_string_cleanup.

DATA lv_filename TYPE string VALUE '  rapor - mustafa   2026-04-29  .txt  '.

"1) Baş/son ve fazla boşlukları toparla
CONDENSE lv_filename.

"2) Tüm boşlukları underscore yapmak isteyelim
REPLACE ALL OCCURRENCES OF space IN lv_filename WITH '_'.

"3) Tireleri de underscore yapalım
REPLACE ALL OCCURRENCES OF '-' IN lv_filename WITH '_'.

"4) Büyük harfe çevir
TRANSLATE lv_filename TO UPPER CASE.

WRITE: / lv_filename.

Bu tarz “veri temizleme” senaryoları gerçek projelerde çok sık çıkar.


Sık yapılan hatalar (Yeni başlayanlar için)

  • CHAR vs STRING karışıklığı: c LENGTH n tipleri sabit uzunlukludur; sonuna boşluk basabilir. Metin işleri için çoğu zaman string daha rahattır.
  • CONDENSE NO-GAPS yanlış kullanımı: Her boşluğu siler; isim/soyisim gibi alanlarda istenmeyen sonuç doğurabilir.
  • FIND sonrası sy-subrc kontrolü unutmak: Bulamadığında farklı akış gerekir.

Sonuç

Bu yazıda ABAP’ta en sık kullanılan string işlemlerini temel seviyede gördük: birleştirme, parçalama, boşluk temizleme, kaydırma/kırpma, replace, case dönüşümü, uzunluk alma ve içerik arama.

Abap’ta READ TABLE kullanımı için bu yazıyı inceleyebilirsiniz.

Link : https://www.mustafahamit.com/abapta-read-table-kullanimi-detayli-anlatim-ve-ornekler/

Loading

Bir yanıt yazın