By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,116 Members | 1,509 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,116 IT Pros & Developers. It's quick & easy.

How to extract just the letters from a string

P: 6
Im trying to take only alphabetical characters out of what the users input to the text field (txtinput.text)..
So if i put in "The yellow man had 32 teeth!"
then im trying to get results like" Theyellowmanhadteeth"
anything besides characters should be stripped out of the inputed field.

this is in visual basic
Apr 26 '07 #1
Share this Question
Share on Google+
14 Replies


P: 6
Hi im replying to this because im trying to take only alphabetical characters out of what the users input to the text field (txtinput.text).. So if i put in "The yellow man had 32 teeth!" then im trying to get results like" Theyellowmanhadteeth" anything besides characters should be stripped out of the inputed field.
Apr 26 '07 #2

Expert 5K+
P: 8,434
Hi im replying to this because im trying to take only alphabetical characters out of what the users input to the text field (txtinput.text).. So if i put in "The yellow man had 32 teeth!" then im trying to get results like" Theyellowmanhadteeth" anything besides characters should be stripped out of the inputed field.
The simple way would be to loop (probably using a For loop) through each character in the string (most likely using Mid() function) and if it is a letter, append it to another, output string.

Psedudo-code...
Expand|Select|Wrap|Line Numbers
  1. For Each Character In MyInput
  2.   If Ucase(Character) is between "A" and "Z"
  3.     MyOutput = MyOutput & Character
  4.   End If
  5. Next
Oh, and by the way - you can't really copy "anything besides characters" because they're all characters.
Apr 26 '07 #3

SammyB
Expert 100+
P: 807
Hi im replying to this because im trying to take only alphabetical characters out of what the users input to the text field (txtinput.text).. So if i put in "The yellow man had 32 teeth!" then im trying to get results like" Theyellowmanhadteeth" anything besides characters should be stripped out of the inputed field.
I'm speechless: Killer didn't use Replace! Just brute-force it:
Expand|Select|Wrap|Line Numbers
  1.     s = Replace(s, 1, "")
  2.     s = Replace(s, 2, "")
  3.     s = Replace(s, 3, "")
  4. ...
  5.  
and, you can put it in a loop so that it is only three lines.

But, also do it Killer's way so that you can learn how to use the Mid function.

BTW, if you're using VB.NET, these functions are part of the Strings module, so you say Strings.Mid(...) and Strings.Replace(...)
Apr 27 '07 #4

Expert 5K+
P: 8,434
I think it would be a bit more than three lines, Sammy. Or are you assuming that letters and numbers are the only possible characters?
Apr 27 '07 #5

dip_developer
Expert 100+
P: 648
Im trying to take only alphabetical characters out of what the users input to the text field (txtinput.text)..
So if i put in "The yellow man had 32 teeth!"
then im trying to get results like" Theyellowmanhadteeth"
anything besides characters should be stripped out of the inputed field.

this is in visual basic
Take two strings say strChar and strNumber

Read the length of your string....Loop through your string.....With the Substring() function Read characters one by one........Check characters with IsNumeric() Function whether its a number or not.....if number then strip off the character and store it to strNumber Otherwise store it to strChar.......

after the loop completes strChar will be your string without number.....
Implement it in code.......

it will be Something like....

Expand|Select|Wrap|Line Numbers
  1. Dim strChar,strNumber As String
  2. Dim n As Integer=myString.Length
  3. For i as integer=0 to n-1
  4. dim str as string=myString.Substring(i,i+1)
  5. If IsNumeric(str) then
  6. strNumber+=str
  7. else
  8. strChar+=str
  9. End if
  10. Next
  11. MsgBox(strChar)
Apr 27 '07 #6

Expert 5K+
P: 8,434
...Check characters with IsNumeric() Function whether its a number or not.....if number then strip off the character and store it to strNumber Otherwise store it to strChar.......
What happens to spaces, and punctuation?
Apr 28 '07 #7

P: 17
I'd do this with ascii characters for each letter, similar to what was said earlier with between "a" and "z".

This is proabably over complicating the problem quite a bit, but it works, it keeps the letters in the case they were found in as well ^^

Expand|Select|Wrap|Line Numbers
  1.  
  2.     Dim strText As String, strLeft As String, strRight As String
  3.     Dim intA As Integer
  4.     strText = Text1.Text
  5.     For intA = 1 To Len(strText)
  6.         strLeft = Left(strText, intA)
  7.         strRight = Right(strLeft, 1)
  8.  
  9.         If Asc(strRight) > 97 And Asc(strRight) < 122 Then
  10.             Label1.Caption = Label1.Caption & strRight
  11.         End If
  12.         If Asc(strRight) > 65 And Asc(strRight) < 90 Then
  13.             Label1.Caption = Label1.Caption & strRight
  14.         End If
  15.     Next intA
  16.  
  17.  
Hope this helps.
Apr 28 '07 #8

Expert 5K+
P: 8,434
I have a similar problem. can you guys help?
...
If I'm not mistaken, this sounds like a question for the Access forum. Would you like me to move it over there? You're likely to get better information there, if this is SQL-related.
Apr 29 '07 #9

Expert 5K+
P: 8,434
I'd do this with ascii characters for each letter, similar to what was said earlier with between "a" and "z".
...
Looks good.

I do have a couple of issues with it, just on performance grounds. There seems to be a lot of duplicated effort.

For example, why use Left() then Right() function? Is this faster than the Mid() function? (this is a serious question - sometimes the longer coding can be more efficient). Or perhaps it's just a personal preference?

And your second If test doesn't need to be executed if the first was satisfied. Personally, I'd short-cut the process by using ElseIf or similar. Plus I would place the Asc() value into a variable so the function is only called once.

In fact, one of the main reasons I like to use Select Case for these kind of situations is that it allows you much more flexibility in your conditions (if checking one value). For example, where you are doing two IF tests, I would have used something like...
Expand|Select|Wrap|Line Numbers
  1. Select Case Asc(strRight)
  2.   Case 97 To 122, 65 To 90
  3.     ...
  4.  
However, while this seems (to me) "nicer" to code, I don't know how it compares on performance. Must check it out one of these days...

Oh, and one more point - I would always use a Long in favour of an Integer, unless space was very tight. Believe it or not, Long data type is (very slightly) faster to use on a 32 bit processor.
Apr 29 '07 #10

P: 20
If I'm not mistaken, this sounds like a question for the Access forum.
right. I got carried away.
Apr 29 '07 #11

Expert 5K+
P: 8,434
right. I got carried away.
Hang on, I'll do a bit of Moderator Magic...

Ok, here is the new thread.
Apr 29 '07 #12

P: 32
dyc
I'd do this with ascii characters for each letter, similar to what was said earlier with between "a" and "z".

This is proabably over complicating the problem quite a bit, but it works, it keeps the letters in the case they were found in as well ^^

Expand|Select|Wrap|Line Numbers
  1.  
  2.     Dim strText As String, strLeft As String, strRight As String
  3.     Dim intA As Integer
  4.     strText = Text1.Text
  5.     For intA = 1 To Len(strText)
  6.         strLeft = Left(strText, intA)
  7.         strRight = Right(strLeft, 1)
  8.  
  9.         If Asc(strRight) > 97 And Asc(strRight) < 122 Then
  10.             Label1.Caption = Label1.Caption & strRight
  11.         End If
  12.         If Asc(strRight) > 65 And Asc(strRight) < 90 Then
  13.             Label1.Caption = Label1.Caption & strRight
  14.         End If
  15.     Next intA
  16.  
  17.  
Hope this helps.
Izzit this code is for vb6?in vb 2005 is there also can use the Left method?Thanks
Jun 8 '07 #13

Expert 5K+
P: 8,434
Izzit this code is for vb6?in vb 2005 is there also can use the Left method?Thanks
Yes, I write in VB6. VB 2005 certainly does have comparable functions, but I don't know the details. I think if you look in the doco, either on your PC or at MS' website, you should find it easily enough.
Jun 8 '07 #14

P: 4
I always prefer to keep them from putting the characters I don't like into the field in the first place by intercepting the keypress event:

Expand|Select|Wrap|Line Numbers
  1. Private Sub Text1_KeyPress(KeyAscii As Integer)
  2. Select Case KeyAscii
  3.   Case Asc("a") To Asc("z"), Asc("A") To Asc("Z")
  4.   Case 13
  5.     'enter key can do something special
  6.     [user code]
  7.     keyascii=0  'this keeps the thing from beeping!
  8.   Case Else
  9.     KeyAscii = 0
  10. End Select
  11. End Sub
You can then allow back space, delete etc by adding the appropriate character codes. I use this a lot when I just want numbers in auto-calculating forms which I write a lot of.
Jun 20 '07 #15

Post your reply

Sign in to post your reply or Sign up for a free account.