RGraph.common.csv.js
5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
// version: 2014-08-16
/**
* o--------------------------------------------------------------------------------o
* | This file is part of the RGraph package - you can learn more at: |
* | |
* | http://www.rgraph.net |
* | |
* | This package is licensed under the Creative Commons BY-NC license. That means |
* | that for non-commercial purposes it's free to use and for business use there's |
* | a 99 GBP per-company fee to pay. You can read the full license here: |
* | |
* | http://www.rgraph.net/license |
* o--------------------------------------------------------------------------------o
*/
/**
* Initialise the various objects
*/
RGraph = window.RGraph || {isRGraph: true};
RGraph.CSV = function (url, func)
{
var RG = RGraph,
ua = navigator.userAgent,
ma = Math;
/**
* Some default values
*/
this.url = url;
this.ready = func;
this.data = null;
this.numrows = null;
this.numcols = null;
this.seperator = arguments[2] || ',';
this.endofline = arguments[3] || /\r?\n/;
/**
* This function splits the CSV data into an array so that it can be useful.
*/
this.fetch = function ()
{
var sep = this.seperator;
var eol = this.endofline;
var obj = this;
if (this.url.substring(0,3) == 'id:') {
// Get rid of any trailing slash
var data = document.getElementById(this.url.substring(3)).innerHTML.replace(/(\r?\n)+$/, '');
// Store the CSV data on the CSV object (ie - this object)
obj.data = data.split(eol);
// Store the number of rows
obj.numrows = obj.data.length;
for (var i=0,len=obj.data.length; i<len; i+=1) {
var row = obj.data[i].split(sep);
if (!obj.numcols) {
obj.numcols = row.length;
}
/**
* If the cell is purely made up of numbers - convert it
*/
for (var j=0; j<row.length; j+=1) {
if ((/^[0-9.]+$/).test(row[j])) {
row[j] = parseFloat(row[j]);
}
// Assign the split-up-row back to the data array
obj.data[i] = row;
}
}
// Call the ready function straight away
obj.ready(obj);
} else {
RGraph.AJAX.getString(this.url, function (data)
{
data = data.replace(/(\r?\n)+$/, '');
obj.data = data.split(eol);
// Store the number of rows
obj.numrows = obj.data.length;
for (var i=0,len=obj.data.length; i<len; i+=1) {
var row = obj.data[i].split(sep);
if (!obj.numcols) {
obj.numcols = row.length;
}
/**
* If the cell is purely made up of numbers - convert it
*/
for (var j=0; j<row.length; j+=1) {
if ((/^\-?[0-9.]+$/).test(row[j])) {
row[j] = parseFloat(row[j]);
}
// Assign the split-up-row back to the data array
obj.data[i] = row;
}
}
// Call the ready function straight away
obj.ready(obj);
});
}
}
/**
* Returns a row of the CSV file
*
* @param number index The index of the row to fetch
* @param start OPTIONAL If desired you can specify a column to start at (which starts at 0 by default)
*/
this.getRow = function (index)
{
var row = [];
var start = arguments[1] || 0;
for (var i=start; i<this.numcols; i+=1) {
row.push(this.data[index][i]);
}
return row;
}
/**
* Returns a column of the CSV file
*
* @param number index The index of the column to fetch
* @param start OPTIONAL If desired you can specify a row to start at (which starts at 0 by default)
*/
this.getCol =
this.getColumn = function (index)
{
var col = [];
var start = arguments[1] || 0;
for (var i=start; i<this.numrows; i+=1) {
col.push(this.data[i][index]);
}
return col;
}
// Fetch the CSV file
this.fetch();
};