{"id":121,"date":"2012-08-07T09:15:09","date_gmt":"2012-08-07T08:15:09","guid":{"rendered":"http:\/\/oprsteny.cz\/?p=121"},"modified":"2012-08-07T09:15:35","modified_gmt":"2012-08-07T08:15:35","slug":"concatenate-two-variables-preserving-blanks","status":"publish","type":"post","link":"https:\/\/oprsteny.cz\/?p=121","title":{"rendered":"Concatenate two variables preserving blanks"},"content":{"rendered":"<p><!--more--><\/p>\n<pre lang=\"abap\"> *&amp;---------------------------------------------------------------------*\r\n *&amp;\u00a0Report\u00a0\u00a0TASK\u00a0#02\r\n *&amp;---------------------------------------------------------------------*\r\n *&amp;\u00a0Description:\u00a0'Let's\u00a0have\u00a0some\u00a0ABAP\u00a0fun'\u00a0contest\u00a0-\u00a0Task\u00a0#2\r\n *\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Merge\u00a0two\u00a0char\u00a0variables\u00a0into\u00a0one\u00a0and\u00a0write\u00a0it\u00a0to\u00a0the\r\n *\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0list,\u00a0so\u00a0that\u00a0spaces\u00a0are\u00a0preserved.\r\n *\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Write\u00a0the\u00a0hash\u00a0sign\u00a0after\u00a0this\u00a0merged\u00a0variable,\r\n *\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0so\u00a0that\u00a0it's\u00a0apparent\u00a0where\u00a0the\u00a0variable's\u00a0content\u00a0ends.\r\n *\r\n *&amp;\u00a0Author\u00a0\u00a0\u00a0\u00a0\u00a0:\u00a0Miroslav\u00a0Oprsteny\r\n *&amp;\u00a0Date\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0:\u00a02011-10-20\r\n *&amp;---------------------------------------------------------------------*\r\n\r\n report\u00a0\u00a0task_#02.\r\n data:\r\n \u00a0\u00a0c1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type\u00a0c\u00a0length\u00a05\u00a0value\u00a0'A\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0c2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type\u00a0c\u00a0length\u00a05\u00a0value\u00a0'B\u00a0\u00a0\u00a0\u00a0',\r\n\r\n \u00a0\u00a0lr_data\u00a0\u00a0\u00a0\u00a0\u00a0type\u00a0ref\u00a0to\u00a0data,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0reference\u00a0to\u00a0variable\u00a0(dynamic\u00a0memory\u00a0allocation\u00a0during\u00a0runtime)\r\n \u00a0\u00a0l_len1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type\u00a0i,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0length\u00a0of\u00a0variable\u00a0c1\r\n \u00a0\u00a0l_len2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0type\u00a0i,\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0length\u00a0of\u00a0variable\u00a0c2\r\n \u00a0\u00a0l_total_len\u00a0type\u00a0i.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0total\u00a0length\u00a0of\u00a0output\u00a0variable\r\n\r\n field-symbols:\r\n \u00a0\u00a0\u00a0&lt;fs_out&gt;.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0field\u00a0symbol\u00a0used\u00a0to\u00a0manipulate\u00a0with\u00a0data\r\n\r\n describe\u00a0field\u00a0c1\u00a0output-length\u00a0l_len1.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0get\u00a0length\u00a0of\u00a0given\u00a0variables\r\n describe\u00a0field\u00a0c2\u00a0output-length\u00a0l_len2.\r\n\r\n l_total_len\u00a0=\u00a0l_len1\u00a0+\u00a0l_len2\u00a0+\u00a01.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0get\u00a0total\u00a0length\u00a0of\u00a0output\u00a0variable\r\n\r\n create\u00a0data\u00a0lr_data\u00a0type\u00a0c\u00a0length\u00a0l_total_len.\u00a0\"\u00a0dynamic\u00a0creation\u00a0of\u00a0a\u00a0variable\u00a0during\u00a0runtime\r\n\r\n assign\u00a0lr_data-&gt;*\u00a0to\u00a0&lt;fs_out&gt;.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0assign\u00a0allocated\u00a0memory\u00a0area\u00a0to\u00a0field\u00a0symbol\r\n &lt;fs_out&gt;\u00a0=\u00a0c1.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0fill\u00a0data\u00a0using\u00a0offsets\r\n &lt;fs_out&gt;+l_len1\u00a0=\u00a0c2.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0fill\u00a0data\u00a0using\u00a0offsets\r\n l_total_len\u00a0=\u00a0l_total_len\u00a0-\u00a01.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0get\u00a0last\u00a0position\u00a0(=\u00a0total_length\u00a0-\u00a01)\r\n &lt;fs_out&gt;+l_total_len\u00a0=\u00a0'#'.\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\u00a0fill\u00a0data\u00a0using\u00a0offsets\r\n write\u00a0&lt;fs_out&gt;.<\/pre>\n<pre lang=\"abap\">*\u00a0SOLUTION\u00a02\u00a0-\u00a0not\u00a0accepted\u00a0due\u00a0to\u00a0usage\u00a0of\u00a0structured\u00a0variable\r\n DATA:\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c1\u00a0TYPE\u00a0char5\u00a0VALUE\u00a0'A\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c2\u00a0LIKE\u00a0c1\u00a0\u00a0\u00a0\u00a0VALUE\u00a0'B\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0begin\u00a0of\u00a0l_out,\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c1\u00a0like\u00a0c1,\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c2\u00a0like\u00a0c2,\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c3(1)\u00a0value\u00a0'#',\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0end\u00a0of\u00a0l_out.\r\n\r\n l_out-c1\u00a0=\u00a0c1.\r\n l_out-c2\u00a0=\u00a0c2.\r\n write\u00a0l_out.<\/pre>\n<pre lang=\"abap\">*\u00a0SOLUTION\u00a03\u00a0-\u00a0not\u00a0accepted\u00a0as\u00a0it\u00a0is\u00a0not\u00a0good\u00a0practise\u00a0to\u00a0hardcode\u00a0solution\u00a0for\u00a0just\u00a0one\u00a0usage\r\n DATA:\r\n \u00a0\u00a0c1\u00a0TYPE\u00a0char5\u00a0VALUE\u00a0'A\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0c2\u00a0LIKE\u00a0c1\u00a0\u00a0\u00a0\u00a0VALUE\u00a0'B\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0c3\u00a0TYPE\u00a0char20,\r\n \u00a0\u00a0s3\u00a0TYPE\u00a0string,\r\n \u00a0\u00a0s4\u00a0LIKE\u00a0s3,\r\n \u00a0\u00a0s5\u00a0LIKE\u00a0s3.\r\n\r\n WRITE:\/\u00a0'Target\u00a0is\u00a0STRING,\u00a0Spaces\u00a0are\u00a0preserved:'.\r\n CONCATENATE\u00a0space\u00a0space\u00a0INTO\u00a0s3\u00a0SEPARATED\u00a0BY\u00a0c1.\r\n CONCATENATE\u00a0space\u00a0space\u00a0INTO\u00a0s4\u00a0SEPARATED\u00a0BY\u00a0c2(2).\r\n CONCATENATE\u00a0s3\u00a0s4\u00a0INTO\u00a0s5.\r\n WRITE:\/\u00a0s5\u00a0NO-GAP,\u00a0'End'.\u00a0SKIP\u00a02.<\/pre>\n<pre lang=\"abap\">*\u00a0SOLUTION\u00a04\u00a0-\u00a0accepted\u00a0but\u00a0not\u00a0very\u00a0universal\r\n Data:\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c1\u00a0TYPE\u00a0char5\u00a0VALUE\u00a0'A\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0c2\u00a0LIKE\u00a0c1\u00a0\u00a0\u00a0\u00a0VALUE\u00a0'B\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0l_out\u00a0TYPE\u00a0string.\r\n\r\n TRANSLATE\u00a0c1\u00a0using\u00a0'\u00a0#'.\r\n TRANSLATE\u00a0c2\u00a0using\u00a0'\u00a0#'.\r\n\r\n CONCATENATE\u00a0c1\u00a0c2\u00a0into\u00a0l_out.\r\n TRANSLATE\u00a0l_out\u00a0using\u00a0'#\u00a0'.\r\n CONCATENATE\u00a0l_out\u00a0'#'\u00a0into\u00a0l_out.\r\n write\u00a0l_out.<\/pre>\n<pre lang=\"abap\">*\u00a0SOLUTION\u00a05\u00a0-\u00a0Not\u00a0working\u00a0on\u00a0all\u00a0systems\u00a0(including\u00a0this\u00a0one)\u00a0but\u00a0most\u00a0elegant\r\n DATA:\r\n \u00a0\u00a0c1\u00a0TYPE\u00a0c\u00a0LENGTH\u00a05\u00a0VALUE\u00a0'A\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0c2\u00a0TYPE\u00a0c\u00a0LENGTH\u00a05\u00a0VALUE\u00a0'B\u00a0\u00a0\u00a0\u00a0',\r\n \u00a0\u00a0s\u00a0TYPE\u00a0string.\r\n\r\n CONCATENATE\u00a0c1\u00a0c2\u00a0'#'\u00a0INTO\u00a0s\u00a0RESPECTING\u00a0BLANKS.\r\n WRITE:\/\u00a0s.<\/pre>\n<pre lang=\"abap\"> *\u00a0SOLUTION\u00a06\u00a0(using\u00a0back\u00a0apostrophes)\u00a0-\u00a0Not\u00a0accepted\u00a0as\u00a0it\u00a0is\u00a0using\u00a0literals\u00a0and\u00a0not\u00a0given\u00a0variables\r\n DATA:\r\n \u00a0\u00a0result\u00a0TYPE\u00a0c\u00a0LENGTH\u00a011.\r\n CONCATENATE\u00a0`A\u00a0\u00a0\u00a0\u00a0`\u00a0`B\u00a0\u00a0\u00a0\u00a0`\u00a0'#'\u00a0INTO\u00a0result.\r\n WRITE\u00a0result.<\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[16,9],"tags":[446,17],"class_list":["post-121","post","type-post","status-publish","format-standard","hentry","category-abap","category-development","tag-abap","tag-sap"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p3nYbe-1X","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=121"}],"version-history":[{"count":3,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/121\/revisions"}],"predecessor-version":[{"id":124,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=\/wp\/v2\/posts\/121\/revisions\/124"}],"wp:attachment":[{"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oprsteny.cz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}