home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 August / Chip_1999-08_cd.bin / zkuste / VBasic / Data / Priklady / iinstr.bas < prev    next >
BASIC Source File  |  1997-04-10  |  3KB  |  85 lines

  1. Attribute VB_Name = "modEnhancedInstr"
  2. Option Explicit
  3.  
  4. Function iInStr%(ByVal startpos%, ByVal searchstring$, ByVal searchfor$, ByVal ignorechar$)
  5.  
  6. ' Description
  7. '     Searches for one string inside another, ignoring all occurences inside a given
  8. '     pair of characters
  9. '
  10. ' Parameters
  11. '     Name                 Type              Contains
  12. '     -----------------------------------------------------------------------------
  13. '     searchstring         String            The string to search in
  14. '     searchfor            String            The string to search for
  15. '     startpos             Integer           The position to start searching
  16. '     ignorechar           String            The character that signales that occurences
  17. '                                            to be ignored
  18. ' Returns
  19. '     The position of the first occurence
  20. '
  21. ' Uses
  22. '     <Module name>:<Procedure Name>
  23. '
  24. ' Last modified by
  25. '     Jens Balchen : Date 1996-11-30 : Rev 1.0.0 : First working version
  26.  
  27. Dim iPos%
  28. Dim ignore_%()
  29. Dim ignorecount%
  30. Dim found%
  31. Dim i%
  32.  
  33.    ' Find all ignore characters in the parameter string
  34.    iPos = InStr(startpos%, searchstring, ignorechar$)
  35.    ignorecount% = 0
  36.    Do While iPos <> 0
  37.       ' Add to array
  38.       ignorecount% = ignorecount% + 1
  39.       ReDim Preserve ignore_(ignorecount%)
  40.       ignore_(ignorecount%) = iPos
  41.       iPos = InStr(iPos + 1, searchstring, ignorechar$)
  42.       ' Check if the next character is also an ignore character, in
  43.       ' which case we don't add. This applies only if the index is an even number
  44.       If ignorecount% Mod 2 <> 0 Then
  45.          If Mid$(searchstring, iPos + 1, 1) = ignorechar$ Then
  46.             ' Ignore
  47.             ignorecount% = ignorecount% - 1
  48.          End If
  49.       End If
  50.    Loop
  51.  
  52.    ' Search for the search string, ignoring all occurences inside two ignore
  53.    ' characters
  54.    iPos% = InStr(startpos%, searchstring$, searchfor$)
  55.    Do While iPos% <> 0
  56.       found% = True
  57.       For i% = 1 To ignorecount% - 1
  58.          If ignore_%(i%) < iPos% And iPos% < ignore_%(i% + 1) Then
  59.             ' Check i%
  60.             If (i% Mod 2 <> 0) Then
  61.                ' This isn't OK.
  62.                found% = False
  63.                Exit For
  64.             Else
  65.                ' This is OK
  66.                ' Return this position
  67.                iInStr% = iPos%
  68.                Exit Function
  69.             End If
  70.          End If
  71.       Next i%
  72.       If Not found% Then
  73.          iPos% = InStr(iPos% + 1, searchstring$, searchfor$)
  74.       Else
  75.          iInStr% = iPos%
  76.          Exit Function
  77.       End If
  78.    Loop
  79.  
  80.    ' If we made it here, no more were found
  81.    iInStr% = 0
  82.  
  83. End Function
  84.  
  85.