String manipulation: cut, insert, column editing...

Discussion in 'Ruby' started by Toki Toki, Aug 12, 2008.

  1. Toki Toki

    Toki Toki Guest

    Hi all,

    Is it possible to use ruby like awk, sed or cut in unix to editing
    strings?

    Let say I have to write INSERT query like this:

    This is the first (1°) item.
    This is the second (2°) item.
    This is the third (3°) item.
    ...

    In one file I have the word-number (first, second, third) and in another
    file I have the real number (1°, 2°, 3°) of the item, both on each line.

    Of course, I don't want to really write it, so how can I "edit" the
    number of the item dinamically? I've tried with regex, but I haven't
    found a solution...

    I think that with some text editors maybe it's possible to do that, but
    I would like to know if with ruby the result can be achieved easier.

    Let me know.

    Thanks.

    Best regards.
    --
    Posted via http://www.ruby-forum.com/.
    Toki Toki, Aug 12, 2008
    #1
    1. Advertising

  2. Toki Toki wrote:
    > Let say I have to write INSERT query like this:
    >
    > This is the first (1°) item.
    > This is the second (2°) item.
    > This is the third (3°) item.
    > ...
    >


    I don't think this would be the best solution, but you could map 1 =>
    "first"... and then use regex to identify the number and get its mapped
    value. Problem is that it runs one way and limited.
    --
    Posted via http://www.ruby-forum.com/.
    Shashank Agarwal, Aug 13, 2008
    #2
    1. Advertising

  3. Toki Toki

    Eric I. Guest

    On Aug 12, 3:09 pm, Toki Toki <> wrote:
    > Hi all,
    >
    > Is it possible to use ruby like awk, sed or cut in unix to editing
    > strings?
    >
    > Let say I have to write INSERT query like this:
    >
    > This is the first (1°) item.
    > This is the second (2°) item.
    > This is the third (3°) item.
    > ..
    >
    > In one file I have the word-number (first, second, third) and in another
    > file I have the real number (1°, 2°, 3°) of the item, both on each line.


    Here's some Ruby code that may do what you're interested in:

    ====

    d1 = open("f1.txt") do |f|
    f.readlines.map { |line| line.chomp }
    end

    d2 = open("f2.txt") do |f|
    f.readlines.map { |line| line.chomp }
    end

    d3 = [d1, d2].transpose

    p d1, d2, d3 # just so you can see what's happened so
    far

    d3.each do |str1, str2|
    puts "This is the #{str1} (#{str2}) item."
    end

    ====

    That's assuming f1.txt contains "first", "second", etc., one per line
    and that f2.txt contains "1st", "2nd", etc., one per line.

    Eric

    ====

    Are you looking for on-site Ruby or Ruby on Rails training
    that's been highly reviewed by former students?
    http://LearnRuby.com
    Eric I., Aug 13, 2008
    #3
  4. 2008/8/12 Toki Toki <>:
    > Is it possible to use ruby like awk, sed or cut in unix to editing
    > strings?


    These are quite different tools but yes, you can use Ruby like them
    most of the time. Please also have a look at command line parameters
    of the Ruby interpreter (ruby -h).

    > Let say I have to write INSERT query like this:
    >
    > This is the first (1=B0) item.
    > This is the second (2=B0) item.
    > This is the third (3=B0) item.
    > ...


    This does not look like an SQL INSERT statement, what is it?

    > In one file I have the word-number (first, second, third) and in another
    > file I have the real number (1=B0, 2=B0, 3=B0) of the item, both on each =

    line.

    Not sure what exactly you are trying to do. For the loading part
    here's another variant:

    h =3D {}

    File.open "f1.txt" do |io1|
    File.open "f2.txt" do |io2|
    io1.zip io2 do |k,v|
    h[k.chomp] =3D v.chomp
    end
    end
    end

    p h

    > Of course, I don't want to really write it, so how can I "edit" the
    > number of the item dinamically? I've tried with regex, but I haven't
    > found a solution...
    >
    > I think that with some text editors maybe it's possible to do that, but
    > I would like to know if with ruby the result can be achieved easier.


    Well, if you tell us what exactly you are trying to achieve. At least
    to me it's not fully clear.

    Kind regards

    robert

    --=20
    use.inject do |as, often| as.you_can - without end
    Robert Klemme, Aug 13, 2008
    #4
  5. Toki Toki

    Toki Toki Guest

    Eric I. wrote:

    > Here's some Ruby code that may do what you're interested in:
    >
    > ====
    >
    > d1 = open("f1.txt") do |f|
    > f.readlines.map { |line| line.chomp }
    > end
    >
    > d2 = open("f2.txt") do |f|
    > f.readlines.map { |line| line.chomp }
    > end
    >
    > d3 = [d1, d2].transpose
    >
    > p d1, d2, d3 # just so you can see what's happened so
    > far
    >
    > d3.each do |str1, str2|
    > puts "This is the #{str1} (#{str2}) item."
    > end
    >
    > ====
    >
    > That's assuming f1.txt contains "first", "second", etc., one per line
    > and that f2.txt contains "1st", "2nd", etc., one per line.
    >
    > Eric
    >
    > ====



    Thanks a lot for the code, it works great and it's really clear.

    Best regards.
    --
    Posted via http://www.ruby-forum.com/.
    Toki Toki, Aug 17, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?U3VyZXNo?=
    Replies:
    0
    Views:
    521
    =?Utf-8?B?U3VyZXNo?=
    Mar 2, 2004
  2. Brian K. Williams
    Replies:
    0
    Views:
    543
    Brian K. Williams
    Mar 2, 2004
  3. Replies:
    0
    Views:
    584
  4. Replies:
    6
    Views:
    757
    =?UTF-8?B?RXJpayBXaWtzdHLDtm0=?=
    Oct 15, 2007
  5. Cut String & Insert in String

    , May 14, 2007, in forum: ASP General
    Replies:
    5
    Views:
    146
    Evertjan.
    May 14, 2007
Loading...

Share This Page