User talk:MichaelWodrich: Difference between revisions

From Rosetta Code
Content added Content deleted
No edit summary
Line 1: Line 1:
=={{header|XProfan}}==
=={{header|XProfan}}==
Delimiter in string "#" or ";" will be ignored.
<lang xprofan>
<lang xprofan>
// http://xprofan.de/start.htm
// https://www.paules-pc-forum.de/forum/board/104-xprofan/

// strip_comments()

Proc Min
Proc Min
Declare int PC, i, float e, t
Declare int PC, i, float e, t
Line 28: Line 24:
Declare int posi[]
Declare int posi[]
Declare int i, min_p, p
Declare int i, min_p, p

min_p = $7FFFFFFF
min_p = $7FFFFFFF
For i, 1, Len(delim)
For i, 1, Len(delim)
Line 36: Line 31:
posi[ 0 ] = InStr( chr$(34), s )
posi[ 0 ] = InStr( chr$(34), s )


If (posi[0] > 0) and (posi[0] < min_p) // if there is a string delimiter on the left side...
// if there is a string delimiter on the left side...
If (posi[0] > 0) and (posi[0] < min_p)
If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) ) // ...and counting of delimiter is odd, then the sign is part of a string
// ...and counting of delimiter is odd, then the sign is part of a string

If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) )
p = posi[ 0 ] + 1
p = posi[ 0 ] + 1
min_p = $7FFFFFFF
min_p = $7FFFFFFF
Line 54: Line 50:
posi[ 0 ] = InStr( chr$(34), s, p )
posi[ 0 ] = InStr( chr$(34), s, p )


If (posi[0] > 0) and (posi[0] < min_p) // if there is a string delimiter on the left side...
// if there is a string delimiter on the left side...
If (posi[0] > 0) and (posi[0] < min_p)
If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) ) // ...and counting of delimiter is odd, then the sign is part of a string
// ...and counting of delimiter is odd, then the sign is part of a string
If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) )
p = posi[ 0 ] + 1
p = posi[ 0 ] + 1
min_p = $7FFFFFFF
min_p = $7FFFFFFF
Line 66: Line 64:
EndIf
EndIf
EndIf
EndIf

Return Trim$( Left$( s, min_p - 1 ) )
Return Trim$( Left$( s, min_p - 1 ) )
EndProc
EndProc

Revision as of 10:46, 29 October 2020

XProfan

Delimiter in string "#" or ";" will be ignored. <lang xprofan> Proc Min

  Declare int PC, i, float e, t
  PC = %PCount
  e = @!(1)
  If PC > 1
    For i, 2, PC
      t = @!(i)
      e = if( (e == 0.0) and (t == 0.0), -(-e - t), if(t < e, t, e) )
    EndFor
  EndIf
  Return e

EndProc

Proc Odd

  Parameters int n
  Return TestBit(n,0)

EndProc

Proc strip_comments

  Parameters string s, delim
  Declare int posi[]
  Declare int i, min_p, p
  min_p = $7FFFFFFF
  For i, 1, Len(delim)
     posi[ i ] = InStr( mid$(delim,i,1), s )
     Case posi[ i ] > 0 : min_p = Min( posi[ i ], min_p )
  EndFor
  posi[ 0 ] = InStr( chr$(34), s )
  // if there is a string delimiter on the left side...
  If (posi[0] > 0) and (posi[0] < min_p)   
     // ...and counting of delimiter is odd, then the sign is part of a string
     If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) )   
        p = posi[ 0 ] + 1
        min_p = $7FFFFFFF
        Repeat
           // closing quote
           posi[ 0 ] = InStr( chr$(34), s, p )
           'Case posi[0] > 0 : posi[0] = posi[0] + p
           p = posi[ 0 ] + 1
           // find new positions after that
           For i, 1, Len(delim)
              posi[ i ] = InStr( mid$(delim,i,1), s, p )
              Case posi[ i ] > 0 : min_p = Min( posi[ i ], min_p )
           EndFor
           posi[ 0 ] = InStr( chr$(34), s, p )
           // if there is a string delimiter on the left side...
           If (posi[0] > 0) and (posi[0] < min_p)
              // ...and counting of delimiter is odd, then the sign is part of a string
              If Odd( Len( Left$(s,min_p) ) - Len( translate$( Left$(s,min_p), Chr$(34), "" )) )
                 p = posi[ 0 ] + 1
                 min_p = $7FFFFFFF
                 // and again....
                 CONTINUE
              EndIf
           EndIf
           BREAK
        Until min_p = 0
     EndIf
  EndIf
  Return Trim$( Left$( s, min_p - 1 ) )

EndProc

cls declare string s, t

s = " apples, pears # and bananas" t = strip_comments( s, "#;" ) Print s + "|\n-> [" + t + "]\n"

s = " apples, pears ; and bananas" t = strip_comments( s, "#;" ) Print s + "|\n-> [" + t + "]\n"

s = " apples, pears \t " t = strip_comments( s, "#;" ) Print s + "|\n-> [" + t + "]\n"

s = " " + chr$(34) + " #oh, my god " + chr$(34) + " apples, pears # and bananas" t = strip_comments( s, "#;" ) Print s + "|\n-> [" + t + "]\n"

waitkey end</lang> Output:

[apples, pears]
[apples, pears]
[apples, pears]
[" #oh, my god " apples, pears]