[Newbie Alert] Probably missing something simple here ... help {wimper}

B

B. Angell

Am trying to read from a file and write to a number of files based on
the first 4 letters of the data line. Therefore, I want to be able to
write the line: A0037775830|lkajsdlkfjsaljf;lsakjfdsa;jf to file A003
*and* append all of the A003 lines as well. Here is the hack I have
below, however, produces errors and I know I am missing something
simple/easy ..... as follows:

#!/usr/bin/ruby -w
File.open("meshdata.txt") do |file|
while line = file.gets
a = line
b = a[0,4]
File.open(b,"w") do |afile|
puts a.afile

end
end
end

Any/all help in this matter is greatly appreciated.

-Bob-
 
B

Ben Giddings

Am trying to read from a file and write to a number of files based on
the first 4 letters of the data line. Therefore, I want to be able to
write the line: A0037775830|lkajsdlkfjsaljf;lsakjfdsa;jf to file A003
*and* append all of the A003 lines as well. Here is the hack I have
below, however, produces errors and I know I am missing something
simple/easy ..... as follows:

#!/usr/bin/ruby -w
File.open("meshdata.txt") do |file|
while line = file.gets
a = line
b = a[0,4]
File.open(b,"w") do |afile|
puts a.afile

afile.puts a
end
end
end

Ben
 
W

William James

B. Angell said:
Am trying to read from a file and write to a number of files based on
the first 4 letters of the data line. Therefore, I want to be able to
write the line: A0037775830|lkajsdlkfjsaljf;lsakjfdsa;jf to file A003
*and* append all of the A003 lines as well. Here is the hack I have
below, however, produces errors and I know I am missing something
simple/easy ..... as follows:

#!/usr/bin/ruby -w
File.open("meshdata.txt") do |file|
while line = file.gets
a = line
b = a[0,4]
File.open(b,"w") do |afile|
puts a.afile

end
end
end

You are repeatedly opening a file that is already open.
Each time you do that, you lose what you have already written.

outfilename = ""; outfile = nil
File.open("meshdata.txt") do |file|
while line = file.gets
b = line[0,4]
if b != outfilename
outfile.close if outfile
outfilename = b
outfile = File.open(outfilename,"w")
end
outfile.puts line
end
end
outfile.close if outfile
 
W

Wilson Bilkovich

Am trying to read from a file and write to a number of files based on
the first 4 letters of the data line. Therefore, I want to be able to
write the line: A0037775830|lkajsdlkfjsaljf;lsakjfdsa;jf to file A003
*and* append all of the A003 lines as well. Here is the hack I have
below, however, produces errors and I know I am missing something
simple/easy ..... as follows:
=20
#!/usr/bin/ruby -w
File.open("meshdata.txt") do |file|
while line =3D file.gets
a =3D line
b =3D a[0,4]
File.open(b,"w") do |afile|
puts a.afile
=20
end
end
end

I'm at the end of a long day here, and I haven't bothered to try to
understand your goals/requirements/etc, so forgive me if this is just
a senseless babble. However, here's what comes to mind:

#!/usr/bin/ruby -w
File.open("meshdata.txt").each_line do |line|
thingy =3D line[0,4]
File.open(thingy,"a+") do |new_file|
new_file.puts line
end
end

If your input file is hooooj, you would probably want to sort it
first, to minimize the number of times you open and close files.
 
W

William James

Wilson said:
Am trying to read from a file and write to a number of files based on
the first 4 letters of the data line. Therefore, I want to be able to
write the line: A0037775830|lkajsdlkfjsaljf;lsakjfdsa;jf to file A003
*and* append all of the A003 lines as well. Here is the hack I have
below, however, produces errors and I know I am missing something
simple/easy ..... as follows:

#!/usr/bin/ruby -w
File.open("meshdata.txt") do |file|
while line = file.gets
a = line
b = a[0,4]
File.open(b,"w") do |afile|
puts a.afile

end
end
end

I'm at the end of a long day here, and I haven't bothered to try to
understand your goals/requirements/etc, so forgive me if this is just
a senseless babble. However, here's what comes to mind:

#!/usr/bin/ruby -w
File.open("meshdata.txt").each_line do |line|
thingy = line[0,4]
File.open(thingy,"a+") do |new_file|
new_file.puts line
end
end

If your input file is hooooj, you would probably want to sort it
first, to minimize the number of times you open and close files.

Doesn't this open and close a file every time a line is
read from meshdata.txt, even if that file is sorted?
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top