[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: add to words syntaxes

Dani

3/16/2006 10:49:00 AM

If I understand you well the script should look like this:

outfile = ARGV.shift

lines = ARGF.readlines

nyomtatvanyazonosito, nev, adoszam, adoazonosito, tol, ig =
lines.slice!(0,6).map {|w| w.chomp.chomp(';') }
first_six_data = <<-EOT
'<?xml version="1.0" encoding="windows-1250"?>'
'<nyomtatvanyinformacio>'

'<nyomtatvanyazonosito>'#{nyomtatvanyazonosito}'</nyomtatvanyazonosito>'
'<adozo>'
'<nev>'#{nev}'</nev>'
'<adoszam>'#{adoszam}'</adoszam>'
'<adoazonosito>'#{adoazonosito}'</adoazonosito>'
'</adozo>'
'<idoszak>'
'<tol>'#{tol}'</tol>'
'<ig>'#{ig}'</ig>'
'</idoszak>'
'</nyomtatvanyinformacio>'
'<mezok>'
EOT

marked_up_lines = lines.map do |line|
words = line.split
'<mezo eazon="' + words[0] + '">' + words[1] + '</mezo>' + "\n"
end

File.open(outfile,'w') do |file|
file.write marked_up_lines.join
end

But if i run it so in the ouput only the things after the first six
lines appear....

Daniel

-----Original Message-----
From: Carlos [mailto:angus@quovadis.com.ar]
Sent: Thursday, March 16, 2006 10:46 AM
To: ruby-talk ML
Subject: Re: add to words syntaxes


Dani wrote:
> Thanks, for the answers, but didnt worked. I try to clear my problem,
> Here is the input:
>
> 0608A;
> Teszt Kft;
> 33445566222;
> ;
> 20060101;
> 20060131;
> 0A0001C002A 33445566222
> 0A0001C007A Teszt kft
> # this text repeat himself with other data several times
>
> This, should look like this:
>
> <?xml version="1.0" encoding="windows-1250"?>
> <nyomtatvanyok>
> <nyomtatvany>
> <nyomtatvanyinformacio>
> <nyomtatvanyazonosito>0608A</nyomtatvanyazonosito>
> <adozo>
> <nev>Teszt kft</nev> # the first line from the txt
> <adoszam>33445566222</adoszam> # second line
> <adoazonosito></adoazonosito> #thrid line, in this txt is
blank
> </adozo>
> <idoszak>
> <tol>20060101</tol> # fourth
> <ig>20060131</ig> # fifth
> </idoszak>
> </nyomtatvanyinformacio>
> <mezok>
> <mezo eazon="0A0001C002A">11111111122</mezo> # and the lines...
> <mezo eazon="0A0001C007A">Próba Cég</mezo>
> .....
> </mezok></nyomtatvany></nyomtatvanyok>
>
> So my problem is how can I get an XML source like above. For the
columns
> I already have this script:
> outfile = ARGV.shift
>
> lines = ARGF.readlines

Well, before you start to loop to fill the "mezo" tags, extract the
other lines:

nyomtatvanyazonosito, nev, adoszam, adoazonosito, tol, ig =
lines.slice!(0,6).map {|w| w.chomp.chomp(';') }
first_six_data = <<-EOT
<?xml ...
<nyomtatvanyinformacio>
<nyomtatvanyazonosito>#{nyomtatvanyazonosito}</nyomtatvanyazonosito>
<adozo>
<nev>#{nev}</nev>
...
EOT

...And then continue processing the array as before.

> marked_up_lines = lines.map do |line|
> words = line.split
> '<mezo eazon="' + words[0] + '">' + words[1] + '</mezo>' + "\n"
> end
>
> File.open(outfile,'w') do |file|
file.write first_six_data
> file.write marked_up_lines.join
> end

HTH

(warning: code not tested)




1 Answer

Carlos

3/16/2006 11:26:00 AM

0

Dani wrote:

> If I understand you well the script should look like this:
>
> outfile = ARGV.shift
>
> lines = ARGF.readlines
>
> nyomtatvanyazonosito, nev, adoszam, adoazonosito, tol, ig =
> lines.slice!(0,6).map {|w| w.chomp.chomp(';') }
> first_six_data = <<-EOT
> '<?xml version="1.0" encoding="windows-1250"?>'

Why the quotes here? The string is everything between the line following
"<<-EOT" and "EOT". See
http://www.ruby-doc.org/docs/ruby-doc-bundle/Manual/man-1.4/syntax.htm...

[...]

> File.open(outfile,'w') do |file|

# You forgot to write the variable first_six_data here.
file.write first_six_data
> file.write marked_up_lines.join

# And here probably you need to write
file.write "</...></...></...>"
> end

HTH