# Fized size record from a string

**URL:** <https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493>\
**Category:** Ruby\
**Created:** [March 10, 2009, 2:55pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493 "2009-03-10T14:55:50Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [March 10, 2009, 2:55pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493/1 "2009-03-10T14:55:50Z")

</div>

Hello, I’m new to Ruby, and I’m learning it with a project that also  
involves rails…  
I’m stuck with an apparently simple problem, I receive from a form a  
String and I need to extend it to a fixed char number (it must be 16  
chars with eventual trailing spaces)  
I’ve tought to convert it to an array, it’s easy but I don’t know how  
to extend it to the needed size.  
Also I could add spaces to the string, but the again how can i control  
how many I need to add?  
Any hint on how I could do that?  
Thank you very much

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [March 10, 2009, 3:03pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493/2 "2009-03-10T15:03:55Z")

</div>

lucac81 wrote:

> Hello, I’m new to Ruby, and I’m learning it with a project that also  
> involves rails…  
> I’m stuck with an apparently simple problem, I receive from a form a  
> String and I need to extend it to a fixed char number (it must be 16  
> chars with eventual trailing spaces)

Look at the String#% method:

irb(main):003:0\> “%-16s” % “123”  
=\> "123 "

This won’t work if the original string is longer than 16, though. In  
that case you just a copy of the original string.

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [March 10, 2009, 3:10pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493/3 "2009-03-10T15:10:32Z")

</div>

On Mar 10, 8:51 am, lucac81 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Thank you very much  
> Simple, not very intelligent way could be

(‘string’ + ‘-’\*30)[0…16]

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [March 10, 2009, 3:11pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493/4 "2009-03-10T15:11:43Z")

</div>

On Mar 10, 2:51 pm, lucac81 [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Thank you very much  
> Uhmm I just found how to achieve this… using the ljust method of the  
> String class…

str.ljust(integer, padstr=’ ') =\> new\_str

If integer is greater than the length of str, returns a new String of  
length integer with str left justified and padded with padstr;  
otherwise, returns str.

“hello”.ljust(4) #=\> “hello”  
“hello”.ljust(20) #=\> "hello "  
“hello”.ljust(20, ‘1234’) #=\> “hello123412341234123”

this solves my problem, and there is the rjust method that works fine  
on the other side (I need that too)

---

<div class="post-metadata">

**Author:** ![lucac81](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/71e660/32.png) [@lucac81](https://www.ruby-forum.com/u/lucac81)\
**Post date:** [March 10, 2009, 3:18pm UTC](https://www.ruby-forum.com/t/fized-size-record-from-a-string/162493/5 "2009-03-10T15:18:10Z")

</div>

On Mar 10, 2009, at 9:53 AM, lucac81 wrote:

> Thank you very much

irb\> str = “too short”  
=\> “too short”  
irb\> lng = “this one is big enough”  
=\> “this one is big enough”

With Kernel#sprintf (which String#% calls)  
irb\> “%-16.16s”%str  
=\> "too short "  
irb\> “%-16.16s”%lng  
=\> "this one is big "

With String#ljust  
irb\> str.ljust(16)  
=\> "too short "  
irb\> lng.ljust(16)  
=\> “this one is big enough”

With String#[] (not what you want for short ones)  
irb\> str[0,16]  
=\> “too short”  
irb\> lng[0,16]  
=\> "this one is big "

-Rob

Rob B. [http://agileconsultingllc.com](http://agileconsultingllc.com)  
removed\_email\_address@domain.invalid
