web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Microsoft Dynamics AX (Archived)

Loop through String characters using x++

(0) ShareShare
ReportReport
Posted on by 2,426

Good Morning,

I have one field which has fixed size of 12000 characters.

if that string field exceeds 80 characters then we must insert ~(Tilde) Symbol in between line.

EX :-

str     12000     name = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";

In tht above example 12000 is fixed size .

Now there are 173 characters.

As i said for every 80 characters it must insert ~ and starts 81 character

Output :-

name = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAA";

How can i achieve this.

For 80 i wrote this.

int i;
i = strLen(name);
if(i>80)
{
before80 = subStr(name,1,80);
before80 = before80+"~";
after80 = subStr(name,81,i);
afterchange = before80+after80;
}

But i am unable how to loop for 12000 size.

Please provide any help.

Any help would be greatly appreciated.

Regards.

Have a great day.

*This post is locked for comments

I have the same question (0)
  • Suggested answer
    Vilmos Kintera Profile Picture
    46,149 on at

    Here is the simplest solution with a for loop and strIns:

    [View:https://msdn.microsoft.com/en-us/library/aa892194.aspx:750:50]

        str     name = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAA';
        int     i;
        
        info(strFmt('Total string length: %1, Tildes required: %2', strLen(name), strLen(name) div 80));

    for (i = 1; i < (strLen(name) div 80) + 1; i++) { name = strIns(name, '~', i * 81); } info(name);
  • Suggested answer
    Vilmos Kintera Profile Picture
    46,149 on at

    I have updated the code, it will give accurate values now.

    Alternative solution would be to use a single-line regular expression, but I am not great with that.

  • AX 2012 r3 Profile Picture
    2,426 on at

    Hi Vilmos,

    Thankyou so much for your reply.

    I tried your solution.

    Solution -1 :-

       for (i = 1; i <= strLen(name) div 80; i++)

       {

           //name = strIns(name, '~', i * 80 + i);

           name = strIns(name, '\n~', i * 81 + i); // For easier readability add a line break

       }

       info(name);

    Output :-

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA    - 81 (length)

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA   -  80 (Excluding Tilde(~))

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    ~AAAAAAAAAA

    New Updated code result :-

    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAAAAAAAAAA

    Now Tilde(~) symbol is coming after 79.So the length before ~(Tilde) is 79.

    I am trying to get Tilde(~) symbol after 80.For each line.

    Please help.

    The very first line i am getting 81.for solution-1 and 79- for solution -2 .

    Please help.

    Regards.

    Have a great day.

  • Vilmos Kintera Profile Picture
    46,149 on at

    Do not use the one with the line breaks. I have edited it multiple times, maybe you have copied the wrong one. I have checked the current one in Notepad++ and it looks correct to me, line 1 finished at 80 and subsequent lines at 81 due to including the tilde as an additional column.

  • AX 2012 r3 Profile Picture
    2,426 on at

    Hi Vilmos,

    Please find the below screenshots

    0508.2.png

    0508.2.png

    Maximum 80 characters per line. Inbetween use ~ Symbol.

    Ex :- 1-80~81-161~162-........(continues)

    Please help.

    Regards.

    Have a great day.

  • Vilmos Kintera Profile Picture
    46,149 on at

    Typo fixed. It does split it exactly at 80 characters and inserts a tilde afterwards.

  • Verified answer
    Vilmos Kintera Profile Picture
    46,149 on at
        str     name = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
            +'AAAAAAAAAAAAAAAAAAAAAAAAA';
        int     i;
        
        info(strFmt('Total string length: %1, Tildes required: %2', strLen(name), strLen(name) div 80));
    
        for (i = 1; i < (strLen(name) div 80) + 1; i++)
        {
            name = strIns(name, '~', i * 80 + i);
        }
        
        info(name);
  • AX 2012 r3 Profile Picture
    2,426 on at

    Hi,

    This has been Modified.

    Modified :-

    strLength = strlen(name);

    for (i = 1; i < (strlength div 80) + 1; i++)

           {

               //name = strIns(name, '~', (i * 80) + 1);

               name= strIns(name, '~', i * 81);

           }

    In your Code :

    i*80 thats why it is printing wrong

    Thankyou so much for four help Vilmos.

    Regards.

    Have a great day.

  • Suggested answer
    Vilmos Kintera Profile Picture
    46,149 on at

    It should be i*80 + i to have it correct for multiple splits, as pasted fresh above.

    I have managed to solve it with 1 line using regular expression too, which is a more elegant solution, no looping required:

       name = System.Text.RegularExpressions.Regex::Replace(name, @"(\w{80})", '$1~');

    Kindly take your time to mark helpful answers.

  • Vilmos Kintera Profile Picture
    46,149 on at

    Try the RegEx, it is better to use since it should be performing faster for longer strings. Also mark that answer please.

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > 🔒一 Microsoft Dynamics AX (Archived)

#1
Martin Dráb Profile Picture

Martin Dráb 4 Most Valuable Professional

#1
Priya_K Profile Picture

Priya_K 4

#3
MyDynamicsNAV Profile Picture

MyDynamicsNAV 2

Last 30 days Overall leaderboard

Featured topics

Product updates

Dynamics 365 release plans