Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. Other Discussions
  3. The Weird and The Wonderful
  4. Why? Just why?

Why? Just why?

Scheduled Pinned Locked Moved The Weird and The Wonderful
helpquestioncareer
27 Posts 14 Posters 4 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • C Chris Quinn

    Here's my monkey giblets! I knew I still had it somewhere

    Function Namecase(ByVal Sourcestring As String) As String
    Dim ConvertChar As Integer, Jock As Integer
    Dim StringLength As Integer, loopvar As Integer
    Dim Newstring As String, Nextchar As String
    Dim MacPos As Integer, Maclen As Integer, TestMac As String

    On Error GoTo HandleErr
    'Lowercase the whole string
    
    StringLength = Len(Sourcestring)
    Sourcestring = LCase$(Sourcestring)
    
    For loopvar = 1 To StringLength
        'loop through the string letter by letter and
        'Convert the letter to uppercase if it is :-
    
        'The First Character in the text box
        ConvertChar = (loopvar = 1)
    
        'or character following space, hypen or apostrophe
        If Not ConvertChar Then ConvertChar = InStr(" -' ", Mid$(Sourcestring, (loopvar - 1), 1))
    
        ''or first character following a Mc for the Scots amongst us
        '    If Not ConvertChar Then
        '        If loopvar > 2 Then ConvertChar = (Mid$(SourceString, (loopvar - 2), 2) = "mc")
        '    End If
    
        Nextchar = Mid$(Sourcestring, loopvar, 1)
        If ConvertChar Then        'Convert character to uppercase if it meets the criteria
            Nextchar = UCase$(Nextchar)
        End If
        Newstring = Newstring & Nextchar        'Concatenate to destination
    Next loopvar
    TestMac = "|" & Newstring & "|"
    MacPos = (InStr("|Machin|Macaskill|Mack|Mackie|Macaly|Macy|Mace|Macari|Macley|Macnamara|Mackay|", TestMac))
    Jock = (MacPos = 0)
    If Jock Then
        MacPos = InStr(Newstring, "Mac")
        Maclen = Len(Newstring)
        If MacPos > 0 Then
            Newstring = left$(Newstring, MacPos + 2) & (UCase$(Mid$(Newstring, MacPos + 3, 1)) & right$(Newstring, (Maclen - (MacPos + 3))))
        End If
        MacPos = InStr(Newstring, "Mc")
        If MacPos > 0 Then
            Newstring = left$(Newstring, MacPos + 1) & (UCase$(Mid$(Newstring, MacPos + 2, 1)) & right$(Newstring, (Maclen - (MacPos + 2))))
        End If
    End If
    Namecase = Newstring        'return the completed string
    

    ExitHere:
    Exit Function

    ' Error handling block added by Error Handler Add-In. DO NOT EDIT this block of code.
    ' Automatic error handler last updated at 09-21-2004 10:35:07   'ErrorHandler:$$D=09-21-2004    'ErrorHandler:$$T=10:35:07
    

    HandleErr:
    Select Case Err.Number
    Case Else
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritic

    B Offline
    B Offline
    BobJanova
    wrote on last edited by
    #10

    MacAskill and (definitely) MacNamara look like they are real Macs. This kind of code just implies your input and/or requirements are crap, though. People should be trusted to type their own name as they want it.

    N C 2 Replies Last reply
    0
    • B BobJanova

      MacAskill and (definitely) MacNamara look like they are real Macs. This kind of code just implies your input and/or requirements are crap, though. People should be trusted to type their own name as they want it.

      N Offline
      N Offline
      Nagy Vilmos
      wrote on last edited by
      #11

      This goes back to a more elegant age where people couldn't use puters.

      1 Reply Last reply
      0
      • N Nagy Vilmos

        Stop!

        J Offline
        J Offline
        Jorgen Andersson
        wrote on last edited by
        #12

        I'm Too Legit to Quit, I Don't Stop until I'm Gaining Momentum. So Feel My Power it's Hammertime.

        Wrong is evil and must be defeated. - Jeff Ello[^]

        1 Reply Last reply
        0
        • N Nagy Vilmos

          I know, lets keep re-comparing strings as it's cheap and easy. Thank you VB6; the gift that keeps on giving.

          Public Function sConvertCase(sInString, lType As VbStrConv) As String
          Dim sReturn As String
          Dim lPos As Long
          Dim lStart As Long
          Dim lNext As Long
          On Local Error Resume Next
          sReturn = StrConv(sInString, lType)
          If lType = vbProperCase Then
          'check for This-That, O'Sumin ,McSumin, von Sumin, MacName (must be input as MacN...)
          lPos = 0
          Do
          lStart = lPos + 1
          lPos = InStr(lStart, sReturn, "Mc")
          lNext = InStr(lStart, sReturn, "Mac")
          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
          lPos = lNext
          End If
          lNext = InStr(lStart, sReturn, "O'")
          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
          lPos = lNext
          End If
          lNext = InStr(lStart, sReturn, "Von ")
          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
          lPos = lNext
          End If
          lNext = InStr(lStart, sReturn, "-")
          If lNext > 0 And lNext < lPos Or lPos = 0 Then
          lPos = lNext
          End If

                  If lPos = 0 Then
                  ElseIf Mid$(sReturn, lPos, 1) = "-" Then
                      Mid$(sReturn, lPos + 1, 1) = UCase$(Mid$(sReturn, lPos + 1, 1))
                  ElseIf Mid$(sReturn, lPos, 2) = "Mc" Then
                      Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 1))
                  ElseIf Mid$(sReturn, lPos, 3) = "Mac" Then
                      If Mid$(sInString, lPos, 3) = "Mac" And Mid$(sInString, lPos + 3, 1) = UCase$(Mid$(sInString, lPos, 3)) Then
                          Mid$(sReturn, lPos + 3, 1) = UCase$(Mid$(sReturn, lPos + 3, 1))
                      End If
                  ElseIf Mid$(sReturn, lPos, 2) = "O'" Then
                      Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 2))
                  ElseIf Mid$(sReturn, lPos, 4) = "Von " Then
                      Mid$(sReturn, lPos, 1) = "v"
                  End If
              Loop While lPos > 0
          End If
          

          Done:
          sConvertCase = sReturn
          End Function

          B Offline
          B Offline
          Bernhard Hiller
          wrote on last edited by
          #13

          Well, you have to run that code at the speed of MacH 2.

          1 Reply Last reply
          0
          • B BobJanova

            MacAskill and (definitely) MacNamara look like they are real Macs. This kind of code just implies your input and/or requirements are crap, though. People should be trusted to type their own name as they want it.

            C Offline
            C Offline
            Chris Quinn
            wrote on last edited by
            #14

            I have a Scottish friend called Macaskill who definitely does not capitalise internally, and the others were ascertained by looking through the telephone directories of several major British cities, though I think Macnamara[^] is a special special case - some capitalise and some don't

            ========================================================= I'm an optoholic - my glass is always half full of vodka. =========================================================

            1 Reply Last reply
            0
            • N Nagy Vilmos

              I know, lets keep re-comparing strings as it's cheap and easy. Thank you VB6; the gift that keeps on giving.

              Public Function sConvertCase(sInString, lType As VbStrConv) As String
              Dim sReturn As String
              Dim lPos As Long
              Dim lStart As Long
              Dim lNext As Long
              On Local Error Resume Next
              sReturn = StrConv(sInString, lType)
              If lType = vbProperCase Then
              'check for This-That, O'Sumin ,McSumin, von Sumin, MacName (must be input as MacN...)
              lPos = 0
              Do
              lStart = lPos + 1
              lPos = InStr(lStart, sReturn, "Mc")
              lNext = InStr(lStart, sReturn, "Mac")
              If lNext > 0 And (lNext < lPos Or lPos = 0) Then
              lPos = lNext
              End If
              lNext = InStr(lStart, sReturn, "O'")
              If lNext > 0 And (lNext < lPos Or lPos = 0) Then
              lPos = lNext
              End If
              lNext = InStr(lStart, sReturn, "Von ")
              If lNext > 0 And (lNext < lPos Or lPos = 0) Then
              lPos = lNext
              End If
              lNext = InStr(lStart, sReturn, "-")
              If lNext > 0 And lNext < lPos Or lPos = 0 Then
              lPos = lNext
              End If

                      If lPos = 0 Then
                      ElseIf Mid$(sReturn, lPos, 1) = "-" Then
                          Mid$(sReturn, lPos + 1, 1) = UCase$(Mid$(sReturn, lPos + 1, 1))
                      ElseIf Mid$(sReturn, lPos, 2) = "Mc" Then
                          Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 1))
                      ElseIf Mid$(sReturn, lPos, 3) = "Mac" Then
                          If Mid$(sInString, lPos, 3) = "Mac" And Mid$(sInString, lPos + 3, 1) = UCase$(Mid$(sInString, lPos, 3)) Then
                              Mid$(sReturn, lPos + 3, 1) = UCase$(Mid$(sReturn, lPos + 3, 1))
                          End If
                      ElseIf Mid$(sReturn, lPos, 2) = "O'" Then
                          Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 2))
                      ElseIf Mid$(sReturn, lPos, 4) = "Von " Then
                          Mid$(sReturn, lPos, 1) = "v"
                      End If
                  Loop While lPos > 0
              End If
              

              Done:
              sConvertCase = sReturn
              End Function

              D Offline
              D Offline
              Dave Kreskowiak
              wrote on last edited by
              #15

              You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

              A guide to posting questions on CodeProject

              How to debug small programs
              Dave Kreskowiak

              N B Z C B 6 Replies Last reply
              0
              • D Dave Kreskowiak

                You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                A guide to posting questions on CodeProject

                How to debug small programs
                Dave Kreskowiak

                N Offline
                N Offline
                Nagy Vilmos
                wrote on last edited by
                #16

                No, that hurt.

                1 Reply Last reply
                0
                • D Dave Kreskowiak

                  You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                  A guide to posting questions on CodeProject

                  How to debug small programs
                  Dave Kreskowiak

                  B Offline
                  B Offline
                  BobJanova
                  wrote on last edited by
                  #17

                  Oh my word.

                  1 Reply Last reply
                  0
                  • D Dave Kreskowiak

                    You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                    A guide to posting questions on CodeProject

                    How to debug small programs
                    Dave Kreskowiak

                    Z Offline
                    Z Offline
                    ZurdoDev
                    wrote on last edited by
                    #18

                    I'm surprised that CP didn't give an "Out of memory exception" when the OP posted that code. Whew!

                    There are only 10 types of people in the world, those who understand binary and those who don't.

                    1 Reply Last reply
                    0
                    • D Dave Kreskowiak

                      You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                      A guide to posting questions on CodeProject

                      How to debug small programs
                      Dave Kreskowiak

                      C Offline
                      C Offline
                      Chris Quinn
                      wrote on last edited by
                      #19

                      As I always say, it ain't the tool that is used that's the problem, but the tool that uses it.

                      ========================================================= I'm an optoholic - my glass is always half full of vodka. =========================================================

                      1 Reply Last reply
                      0
                      • C Chris Quinn

                        Here's my monkey giblets! I knew I still had it somewhere

                        Function Namecase(ByVal Sourcestring As String) As String
                        Dim ConvertChar As Integer, Jock As Integer
                        Dim StringLength As Integer, loopvar As Integer
                        Dim Newstring As String, Nextchar As String
                        Dim MacPos As Integer, Maclen As Integer, TestMac As String

                        On Error GoTo HandleErr
                        'Lowercase the whole string
                        
                        StringLength = Len(Sourcestring)
                        Sourcestring = LCase$(Sourcestring)
                        
                        For loopvar = 1 To StringLength
                            'loop through the string letter by letter and
                            'Convert the letter to uppercase if it is :-
                        
                            'The First Character in the text box
                            ConvertChar = (loopvar = 1)
                        
                            'or character following space, hypen or apostrophe
                            If Not ConvertChar Then ConvertChar = InStr(" -' ", Mid$(Sourcestring, (loopvar - 1), 1))
                        
                            ''or first character following a Mc for the Scots amongst us
                            '    If Not ConvertChar Then
                            '        If loopvar > 2 Then ConvertChar = (Mid$(SourceString, (loopvar - 2), 2) = "mc")
                            '    End If
                        
                            Nextchar = Mid$(Sourcestring, loopvar, 1)
                            If ConvertChar Then        'Convert character to uppercase if it meets the criteria
                                Nextchar = UCase$(Nextchar)
                            End If
                            Newstring = Newstring & Nextchar        'Concatenate to destination
                        Next loopvar
                        TestMac = "|" & Newstring & "|"
                        MacPos = (InStr("|Machin|Macaskill|Mack|Mackie|Macaly|Macy|Mace|Macari|Macley|Macnamara|Mackay|", TestMac))
                        Jock = (MacPos = 0)
                        If Jock Then
                            MacPos = InStr(Newstring, "Mac")
                            Maclen = Len(Newstring)
                            If MacPos > 0 Then
                                Newstring = left$(Newstring, MacPos + 2) & (UCase$(Mid$(Newstring, MacPos + 3, 1)) & right$(Newstring, (Maclen - (MacPos + 3))))
                            End If
                            MacPos = InStr(Newstring, "Mc")
                            If MacPos > 0 Then
                                Newstring = left$(Newstring, MacPos + 1) & (UCase$(Mid$(Newstring, MacPos + 2, 1)) & right$(Newstring, (Maclen - (MacPos + 2))))
                            End If
                        End If
                        Namecase = Newstring        'return the completed string
                        

                        ExitHere:
                        Exit Function

                        ' Error handling block added by Error Handler Add-In. DO NOT EDIT this block of code.
                        ' Automatic error handler last updated at 09-21-2004 10:35:07   'ErrorHandler:$$D=09-21-2004    'ErrorHandler:$$T=10:35:07
                        

                        HandleErr:
                        Select Case Err.Number
                        Case Else
                        MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritic

                        M Offline
                        M Offline
                        MarkTJohnson
                        wrote on last edited by
                        #20

                        Glad to see it takes care of MacHine

                        1 Reply Last reply
                        0
                        • N Nagy Vilmos

                          I know, lets keep re-comparing strings as it's cheap and easy. Thank you VB6; the gift that keeps on giving.

                          Public Function sConvertCase(sInString, lType As VbStrConv) As String
                          Dim sReturn As String
                          Dim lPos As Long
                          Dim lStart As Long
                          Dim lNext As Long
                          On Local Error Resume Next
                          sReturn = StrConv(sInString, lType)
                          If lType = vbProperCase Then
                          'check for This-That, O'Sumin ,McSumin, von Sumin, MacName (must be input as MacN...)
                          lPos = 0
                          Do
                          lStart = lPos + 1
                          lPos = InStr(lStart, sReturn, "Mc")
                          lNext = InStr(lStart, sReturn, "Mac")
                          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
                          lPos = lNext
                          End If
                          lNext = InStr(lStart, sReturn, "O'")
                          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
                          lPos = lNext
                          End If
                          lNext = InStr(lStart, sReturn, "Von ")
                          If lNext > 0 And (lNext < lPos Or lPos = 0) Then
                          lPos = lNext
                          End If
                          lNext = InStr(lStart, sReturn, "-")
                          If lNext > 0 And lNext < lPos Or lPos = 0 Then
                          lPos = lNext
                          End If

                                  If lPos = 0 Then
                                  ElseIf Mid$(sReturn, lPos, 1) = "-" Then
                                      Mid$(sReturn, lPos + 1, 1) = UCase$(Mid$(sReturn, lPos + 1, 1))
                                  ElseIf Mid$(sReturn, lPos, 2) = "Mc" Then
                                      Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 1))
                                  ElseIf Mid$(sReturn, lPos, 3) = "Mac" Then
                                      If Mid$(sInString, lPos, 3) = "Mac" And Mid$(sInString, lPos + 3, 1) = UCase$(Mid$(sInString, lPos, 3)) Then
                                          Mid$(sReturn, lPos + 3, 1) = UCase$(Mid$(sReturn, lPos + 3, 1))
                                      End If
                                  ElseIf Mid$(sReturn, lPos, 2) = "O'" Then
                                      Mid$(sReturn, lPos + 2, 1) = UCase$(Mid$(sReturn, lPos + 2, 2))
                                  ElseIf Mid$(sReturn, lPos, 4) = "Von " Then
                                      Mid$(sReturn, lPos, 1) = "v"
                                  End If
                              Loop While lPos > 0
                          End If
                          

                          Done:
                          sConvertCase = sReturn
                          End Function

                          M Offline
                          M Offline
                          mikepwilson
                          wrote on last edited by
                          #21

                          Holy crap. Here's what you do. Install Strawberry Perl on that machine, and have that function shell out to a perl one-liner. It'll still be more efficient and less dain bramaged.

                          N 1 Reply Last reply
                          0
                          • M mikepwilson

                            Holy crap. Here's what you do. Install Strawberry Perl on that machine, and have that function shell out to a perl one-liner. It'll still be more efficient and less dain bramaged.

                            N Offline
                            N Offline
                            Nagy Vilmos
                            wrote on last edited by
                            #22

                            mikepwilson wrote:

                            Install Strawberry Perl

                            No, I don't think so...

                            mikepwilson wrote:

                            less dain bramaged

                            you were saying? :laugh:

                            M 1 Reply Last reply
                            0
                            • N Nagy Vilmos

                              mikepwilson wrote:

                              Install Strawberry Perl

                              No, I don't think so...

                              mikepwilson wrote:

                              less dain bramaged

                              you were saying? :laugh:

                              M Offline
                              M Offline
                              mikepwilson
                              wrote on last edited by
                              #23

                              I dunno man, consider it. Perl is the language for programmers who have actual work to get done.

                              1 Reply Last reply
                              0
                              • D Dave Kreskowiak

                                You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                                A guide to posting questions on CodeProject

                                How to debug small programs
                                Dave Kreskowiak

                                B Offline
                                B Offline
                                Brisingr Aerowing
                                wrote on last edited by
                                #24

                                :wtf:

                                What do you get when you cross a joke with a rhetorical question?

                                1 Reply Last reply
                                0
                                • Kornfeld Eliyahu PeterK Kornfeld Eliyahu Peter

                                  I can't see how it's connected to VB6 (or any language for that matter)...It's a pure human problem...

                                  I'm not questioning your powers of observation; I'm merely remarking upon the paradox of asking a masked man who he is. (V)

                                  R Offline
                                  R Offline
                                  Rob Grainger
                                  wrote on last edited by
                                  #25

                                  Actually string handling in VB6 is particularly dire. The "natural" syntax encourages you to build strings from smaller ones, but the implementation just reallocates. I remember seeing some code building particularly long strings that had exponentially increasing performance time on long input - entirely due to naive string-handling. There are workarounds, but the language has to take some blame here.

                                  "If you don't fail at least 90 percent of the time, you're not aiming high enough." Alan Kay.

                                  F 1 Reply Last reply
                                  0
                                  • D Dave Kreskowiak

                                    You thought that code was bad?? How about this[^] little gem, written in C#?? I hate hearing crap about VB being the sole domain of horrible code.

                                    A guide to posting questions on CodeProject

                                    How to debug small programs
                                    Dave Kreskowiak

                                    R Offline
                                    R Offline
                                    Rob Grainger
                                    wrote on last edited by
                                    #26

                                    Not the sole domain, but a particularly frequent one due to some bad language design decisions. JavaScript is similarly plagued, and of course one can always create bad code in any language, just some make it the default way of working for many.

                                    "If you don't fail at least 90 percent of the time, you're not aiming high enough." Alan Kay.

                                    1 Reply Last reply
                                    0
                                    • R Rob Grainger

                                      Actually string handling in VB6 is particularly dire. The "natural" syntax encourages you to build strings from smaller ones, but the implementation just reallocates. I remember seeing some code building particularly long strings that had exponentially increasing performance time on long input - entirely due to naive string-handling. There are workarounds, but the language has to take some blame here.

                                      "If you don't fail at least 90 percent of the time, you're not aiming high enough." Alan Kay.

                                      F Offline
                                      F Offline
                                      Fueled By Decaff
                                      wrote on last edited by
                                      #27

                                      Erm, isn't it the same as natural string handling in C#? Yes, I do know you should use a StringBuilder, but a new coder would not necessarily know that.

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups