clean_text_table 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,15 @@
1
+ = CleanTextTable
2
+
3
+ This package contains clean-txt-table, a simple ruby tool that can transform rows of delimited text into an ASCII table.
4
+
5
+ clean-txt-table has the following features:
6
+
7
+ * Users can choose from two output options. The standard output option will display the ASCII table as plain as it gets with a row header and then the contents of the table. The alternate method of display will add a "border line" between each row of data. In this mode, users can choose to print the row header for each row of data or only one row header.
8
+
9
+ == Download
10
+
11
+ The latest version of clean-txt-table can be found at
12
+
13
+ * http://rubyforge.org/frs/?group_id=5273
14
+
15
+ == Instalation
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'clean_text_table/table'
@@ -0,0 +1,138 @@
1
+ class Table
2
+
3
+ attr_accessor :table_hsh, :field_width_hsh, :num_fields, :header, :separate_each_line, :header_per_line
4
+
5
+ def initialize( separate_each_line, header_per_line )
6
+ @table_hsh = Hash.new
7
+ @field_width_hsh = Hash.new
8
+ @num_fields = 0
9
+ @separate_each_line = separate_each_line
10
+ @header_per_line = header_per_line
11
+ end
12
+
13
+ def add_row( row, sep )
14
+ fields = row.split( sep )
15
+ if fields.length > @num_fields
16
+ @num_fields = fields.length
17
+ end
18
+ i = @table_hsh.length
19
+ @table_hsh[ i ] = fields
20
+ for col in 0..fields.length - 1
21
+ curr_width = 0
22
+ if !fields[ col ].nil?
23
+ curr_width = fields[ col ].length
24
+ end
25
+ max_width = @field_width_hsh[ col ]
26
+ if max_width.nil? || curr_width > max_width
27
+ @field_width_hsh[ col ] = curr_width
28
+ end
29
+ end
30
+ end
31
+
32
+ def add_header( header, sep )
33
+ @header = header.split( sep )
34
+ if @header.length > @num_fields
35
+ @num_fields = @header.length
36
+ end
37
+ for col in 0..@header.length - 1
38
+ curr_width = 0
39
+ if !@header[ col ].nil?
40
+ curr_width = @header[ col ].length
41
+ end
42
+ max_width = @field_width_hsh[ col ]
43
+ if max_width.nil? || curr_width > max_width
44
+ @field_width_hsh[ col ] = curr_width
45
+ end
46
+ end
47
+ end
48
+
49
+ def dump
50
+ #add header
51
+ table_str = add_header_to_table_str( "" )
52
+ #add table contents
53
+ table_str = add_table_contents( table_str )
54
+ return table_str.to_s
55
+ end
56
+
57
+ private
58
+
59
+ def add_table_contents( table_str )
60
+
61
+ width = 0
62
+ @table_hsh.keys.sort{|x,y| x<=>y}.each do |row|
63
+ fields = @table_hsh[ row ]
64
+ row_str = "| "
65
+ for col in 0..@num_fields - 1
66
+ field_width = @field_width_hsh[ col ]
67
+ field_str = ""
68
+ if !fields[ col ].nil?
69
+ field_str = fields[ col ].to_s
70
+ end
71
+ pad = field_width - field_str.length
72
+ for i in 0..pad
73
+ field_str << " "
74
+ end
75
+ row_str << field_str.to_s
76
+ row_str << "| "
77
+ end
78
+ width = row_str.length
79
+
80
+ #add top separator, in case there is no header
81
+ if row == 0
82
+ table_str << get_sep_line( (row_str.length - 1) )
83
+ end
84
+
85
+ #add row separator
86
+ if @separate_each_line && row > 0 && row < @table_hsh.keys.length
87
+ table_str << get_sep_line( (row_str.length - 1) )
88
+ end
89
+
90
+ #add row
91
+ table_str << row_str.to_s
92
+ table_str << "\n"
93
+
94
+ #add header if applicable
95
+ if @header_per_line && row < @table_hsh.keys.length
96
+ table_str = add_header_to_table_str( table_str )
97
+ end
98
+ end
99
+
100
+ table_str << get_sep_line( width - 1 )
101
+ return table_str
102
+ end
103
+
104
+ def add_header_to_table_str( table_str )
105
+ width = 0
106
+ if !@header.nil?
107
+ row_str = "| "
108
+ for col in 0..@num_fields - 1
109
+ field_width = @field_width_hsh[ col ]
110
+ field_str = ""
111
+ if !@header[ col ].nil?
112
+ field_str = @header[ col ].to_s
113
+ end
114
+ pad = field_width - field_str.length
115
+ for i in 0..pad
116
+ field_str << " "
117
+ end
118
+ row_str << field_str.to_s
119
+ row_str << "| "
120
+ end
121
+ table_str << get_sep_line( (row_str.length - 1) )
122
+ table_str << row_str.to_s
123
+ table_str << get_sep_line( width - 1 )
124
+ width = row_str.length
125
+ end
126
+ return table_str
127
+ end
128
+
129
+ def get_sep_line( length )
130
+ s = ""
131
+ for i in 0..length - 1
132
+ s << "-"
133
+ end
134
+ s << "\n"
135
+ return s
136
+ end
137
+
138
+ end
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'Table'
3
+
4
+ s = ["ABY,2005-01-03,6.92",
5
+ "ABY,2005-01-04,6.75",
6
+ "ABY,2005-01-05,6.58",
7
+ "ABY,2005-01-06,6.59",
8
+ "ABY,2005-01-07,6.59",
9
+ "ABY,2005-01-09,6.59",
10
+ "ABY,2005-01-11,6.67",
11
+ "ABY,2005-01-12,6.52",
12
+ "ABY,2005-01-13,6.16",
13
+ "ABY,2005-01-14,6.19",
14
+ "ABY,2005-01-18,6.02",
15
+ "ABY,2005-01-19,6.17",
16
+ "ABY,1,6.09"]
17
+
18
+ #initialize( separate_each_line, header_per_line )
19
+ table = Table.new( true, false )
20
+ table.add_header( "symbol,date,open", "," )
21
+ s.each do |s|
22
+ table.add_row( s , "," )
23
+ end
24
+ puts table.dump
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.4
3
+ specification_version: 1
4
+ name: clean_text_table
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.0.1
7
+ date: 2008-01-10 00:00:00 -05:00
8
+ summary: Clean Text Table can transform rows of delimited text into an ASCII-table for easier viewing.
9
+ require_paths:
10
+ - lib
11
+ email:
12
+ homepage:
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: clean_text_table
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - John D. Gant, H. A. Goss
31
+ files:
32
+ - lib/clean_text_table
33
+ - lib/clean_text_table/table.rb
34
+ - lib/clean_text_table.rb
35
+ - test/test-table.rb
36
+ - README
37
+ test_files:
38
+ - test/test-table.rb
39
+ rdoc_options: []
40
+
41
+ extra_rdoc_files:
42
+ - README
43
+ executables: []
44
+
45
+ extensions: []
46
+
47
+ requirements: []
48
+
49
+ dependencies: []
50
+