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

how can i turn no 1 to 000001, 2 to 000002 and print them into a text file ?

P: 1
hi, i am trying to convert nos to a special format then print them into a text file. is it possible ? can anyone help me please ?
Apr 24 '07 #1
Share this Question
Share on Google+
9 Replies


Expert 5K+
P: 8,434
hi, i am trying to convert nos to a special format then print them into a text file. is it possible ? can anyone help me please ?
To convert the format, use the Format() function. For more info, check your documentation.

To write to the file, I'd suggest you run a quick search here for the FileSystemObject object. It is discussed fairly frequently.
Apr 24 '07 #2

Robbie
100+
P: 180
That's called 'padding' the number. I have written a simple script which does precisely that, but it is in a different language, not VB, so I am copy/pasting it and converting it right now.
Done!
Tested it, it works.
Killer42, never have used the Format function (didn't actually know about it... because I have never needed to pad numbers in VB...).
Anyway... even though Format will probably do the trick:

Expand|Select|Wrap|Line Numbers
  1. Public Function PadNumber(NumberToPad As Long, NumberOfDigits As Integer) As String
  2. 'NumberToPad - the actual number which needs to be padded.
  3. 'NumberOfDigits - the number of digits to pad the number to.
  4. '
  5. 'This function gives back a STRING - the final padded number
  6.  
  7. PadNumber = CStr(NumberToPad)
  8.  
  9. If NumberOfDigits = 0 Then
  10.     PadNumber = NumberToPad
  11.     GoTo FinishedPadding
  12. End If
  13.  
  14. If Len(PadNumber) = NumberOfDigits Then
  15.     GoTo FinishedPadding
  16. End If
  17.  
  18. If Len(PadNumber) > NumberOfDigits Then
  19.     MsgBox ("NUMBER PADDING SCRIPT: Number was too long to be padded. Number to pad: " + Str(NumberToPad) + ". Digits to pad to: " + Str(NumberOfDigits))
  20.     PadNumber = NumberToPad
  21.     GoTo FinishedPadding
  22. End If
  23.  
  24. While Len(PadNumber) < NumberOfDigits
  25.     PadNumber = "0" + PadNumber
  26. Wend
  27.  
  28. FinishedPadding:
  29. End Function
  30.  
For example, to pad "34" to "00034" (5 digits long), do:
PadNumber(34,5)
Apr 24 '07 #3

Expert 5K+
P: 8,434
Actually, Format() is one of the basics that everyone should know about. It is used for many things, such as showing numbers in various formats (padded, with commas etc), displaying dates and/or times properly, and so on.

Ironically, the thing I've probably used used it for the most is to strip off automatic padding. When you print a number, VB has always wanted to put a space before or after it (I forget which). I use Format(numericvalue) to return it without the space.

:D I see you're using GoTo - that might upset a few "purists".
Apr 24 '07 #4

Expert 5K+
P: 8,434
Hm... I remember writing a routine to do this, years ago. I'll recreate it here (based on your code) for comparison purposes. I don't know how the performance would compare, but it is slightly shorter. :)
Expand|Select|Wrap|Line Numbers
  1. Public Function PadNumber(NumberToPad As Long, NumberOfDigits As Integer) As String
  2.   ' NumberToPad - the actual number which needs to be padded.
  3.   ' NumberOfDigits - the number of digits to pad the number to.
  4.   ' This function gives back a STRING - the final padded number
  5.   PadNumber = Right(String(NumberOfDigits, "0") & Format(NumberToPad), NumberOfDigits)
  6. End Function
Apr 24 '07 #5

Robbie
100+
P: 180
:D I see you're using GoTo - that might upset a few "purists".
Eheh... ^^;;
I'm only using GoTo because the original language (GML, GameMaker Language) will finish executing the script (or function, in VB) when you type 'return variable_name'. So in VB I had to set the value of the function PadNumber, then skip to the end.

In other words, if people don't like GoTo, feel free to replace GoTo FinishedPadding with Exit Function, everything will still work the same. I like to use GoTo in those cases because I may want to do some final thing before exitting the function completely.
I didn't realize there were people who were against using GoTo...(?)
Apr 25 '07 #6

Robbie
100+
P: 180
Hm... I remember writing a routine to do this, years ago. I'll recreate it here (based on your code) for comparison purposes. I don't know how the performance would compare, but it is slightly shorter. :)
Expand|Select|Wrap|Line Numbers
  1. Public Function PadNumber(NumberToPad As Long, NumberOfDigits As Integer) As String
  2.   ' NumberToPad - the actual number which needs to be padded.
  3.   ' NumberOfDigits - the number of digits to pad the number to.
  4.   ' This function gives back a STRING - the final padded number
  5.   PadNumber = Right(String(NumberOfDigits, "0") & Format(NumberToPad), NumberOfDigits)
  6. End Function
Wow, nice, that IS short.
But there's a problem that if len(str(number)) is longer than the number of digits you want to pad the number to, you'll lose digits off the left side of the string.
Maybe the only good point to my long-winded way is that you could change where it does the MsgBox to just return the original number, not losing anything.

Or better still I could change yours slightly:
Expand|Select|Wrap|Line Numbers
  1. Public Function PadNumber(NumberToPad As Long, NumberOfDigits As Integer) As String
  2.   ' NumberToPad - the actual number which needs to be padded.
  3.   ' NumberOfDigits - the number of digits to pad the number to.
  4.   ' This function gives back a STRING - the final padded number
  5. If Len(Str(NumberToPad)) > NumberOfDigits Then
  6.     PadNumber = Str(NumberToPad)
  7. Else
  8.     PadNumber = Right(String(NumberOfDigits, "0") & Format(NumberToPad), NumberOfDigits)
  9. End If
  10. End Function
Apr 25 '07 #7

Expert 5K+
P: 8,434
...
Or better still I could change yours slightly:
What?! You would dare lay hands on my code? ;)

Seriously, nice one. Although I would tend to use Format$() rather than Str(). Mostly just because I hate variants.

I've never undertood why Str even exists, since Format provides the same functionality plus lots more besides. Perhaps Str is faster? (I wonder whether it's a holdover from even older versions of Basic).
Apr 25 '07 #8

Robbie
100+
P: 180
What?! You would dare lay hands on my code? ;)

Seriously, nice one. Although I would tend to use Format$() rather than Str(). Mostly just because I hate variants.

I've never undertood why Str even exists, since Format provides the same functionality plus lots more besides. Perhaps Str is faster? (I wonder whether it's a holdover from even older versions of Basic).
Str was around in very early versions of Basic, before Microsoft ever got their hands on it. :P
Like YaBasic... then a variable was either numeric (stuff=2) or a string (stuff$="two"). You still had good old arrays though. :)
str$() for numeric to string, val() for vice versa.

Seems Microsoft tried to keep Visual Basic at least a little compatible with older Basic versions.
Apr 25 '07 #9

Expert 5K+
P: 8,434
...
Seems Microsoft tried to keep Visual Basic at least a little compatible with older Basic versions.
Actually, I think VB syntax was created as a pretty close match with MS QuickBASIC (and hence QBasic). The changes were generally fairly obvious and necessary things, related to the different user interface and so on.
Apr 25 '07 #10

Post your reply

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