csvutils 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ef0361cf8a365ce0a7538b3403b38c3bb987d217
4
- data.tar.gz: 686475688cfbd737314a2f398a9ab7ea709a20f0
3
+ metadata.gz: 91b99040998dec29903bb139c7650aec805981c9
4
+ data.tar.gz: 4ca0a379e0a99dc01f35957ca021ccb4b56aaef3
5
5
  SHA512:
6
- metadata.gz: 641b29f1234e4ed4df85652e6e33df6739f35da126b59062bf1ea779399f02126ff1a617862abafe97b0cd6eb296ea671b5a3e24bb0c4404533b59bb20151dfd
7
- data.tar.gz: 00b8daafc26bd9c51a7a6fb41d948b959159fa60b0a642c7637f5e5f37c621bc26a387339c5e9961abf509b86c3923ee13528a9a9cbfa315ccfcdc8c34bfc53e
6
+ metadata.gz: 7cae580d42247f3df41c846880cdfc78f4f410fc553acff75b57cf85d542a80e97c6ef4ec7e1e924b1cdd85934596addc4d0941bdab9e31478bf0e012386eaf2
7
+ data.tar.gz: 8398dabd6e1bf01134ba31016b77a866c308c7a75ef426b1ebc995d043c11ec757c15c07bc5b8ba2f81764fa796ad96013055b19af30b70504647aff3915b570
data/Manifest.txt CHANGED
@@ -3,6 +3,15 @@ Manifest.txt
3
3
  README.md
4
4
  Rakefile
5
5
  lib/csvutils.rb
6
+ lib/csvutils/cut.rb
7
+ lib/csvutils/split.rb
8
+ lib/csvutils/test.rb
9
+ lib/csvutils/utils.rb
6
10
  lib/csvutils/version.rb
11
+ test/data/at-austria/AUT.csv
12
+ test/data/de-deutschland/bundesliga.csv
13
+ test/data/eng-england/2017-18/E0.csv
7
14
  test/helper.rb
15
+ test/test_headers.rb
16
+ test/test_misc.rb
8
17
  test/test_version.rb
data/lib/csvutils.rb CHANGED
@@ -9,8 +9,10 @@ require 'fileutils'
9
9
  ###
10
10
  # our own code
11
11
  require 'csvutils/version' # let version always go first
12
-
13
-
12
+ require 'csvutils/utils'
13
+ require 'csvutils/split'
14
+ require 'csvutils/cut'
15
+ require 'csvutils/test'
14
16
 
15
17
 
16
18
 
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ ## check/use class or module ???
4
+
5
+
6
+ class CsvUtils
7
+
8
+ def self.cut( inpath, outpath, *columns, sep: ',' )
9
+
10
+ puts "cvscut in: >#{inpath}< out: >#{outpath}<"
11
+
12
+ ## ["Date", "HomeTeam", "AwayTeam", "FTHG", "FTAG", "HTHG", "HTAG"]
13
+ puts "columns:"
14
+ pp columns
15
+
16
+ text = File.open( inpath, 'r:utf-8' ).read ## note: make sure to use (assume) utf-8
17
+
18
+ csv_options = { headers: true,
19
+ col_sep: sep }
20
+
21
+ table = CSV.parse( text, csv_options )
22
+
23
+
24
+ ## for convenience - make sure parent folders/directories exist
25
+ FileUtils.mkdir_p( File.dirname( outpath )) unless Dir.exists?( File.dirname( outpath ))
26
+
27
+ ## use wb mode - why? why not?
28
+ ## assumes same encoding as input?
29
+ ## fix/todo: better (always) use utf8!!!!
30
+ ## CSV.open( out_path, 'wb' ) do |out|
31
+
32
+ ## use just "regular" File for output - why? why not?
33
+ ## downside will not encode comma (for now) if present ("Beethoven, van")
34
+ ## all values will be unquoted etc. - keep it simple?
35
+
36
+ CSV.open( outpath, 'w:utf-8' ) do |out|
37
+ out << columns ## for row add headers/columns
38
+ table.each do |row|
39
+ values = columns.map { |col| row[col].strip } ## find data for column
40
+ out << values
41
+ end
42
+ end
43
+
44
+ puts 'Done.'
45
+ end ## method self.cut
46
+
47
+ end # class CsvUtils
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+
4
+
5
+
6
+ class CsvUtils
7
+
8
+ def self.split( path, *columns, sep: ',', &blk )
9
+
10
+ puts "cvssplit in: >#{path}<"
11
+
12
+ ## ["Date", "HomeTeam", "AwayTeam", "FTHG", "FTAG", "HTHG", "HTAG"]
13
+ puts "columns:"
14
+ pp columns
15
+
16
+ text = File.open( path, 'r:utf-8' ).read ## note: make sure to use (assume) utf-8
17
+
18
+ ## note: do NOT use headers
19
+ ## for easy sorting use "plain" array of array for records
20
+ csv_options = { col_sep: sep }
21
+
22
+ data = CSV.parse( text, csv_options )
23
+
24
+ ## todo/check: (auto-) strip (remove all leading and trailing spaces)
25
+ ## from all values - why? why not?
26
+ ## check if CSV.parse has an option for it?
27
+
28
+ headers = data.shift ## remove top array item (that is, row with headers)
29
+
30
+ header_mapping = {}
31
+ headers.each_with_index { | header,i | header_mapping[header]=i }
32
+ pp header_mapping
33
+
34
+ ## map columns to array indices e.g. ['Season', 'Div'] => [1,2]
35
+ column_indices = columns.map { |col| header_mapping[col] }
36
+ pp column_indices
37
+
38
+
39
+ ###################################################
40
+ ## note: sort data by columns (before split)
41
+ data = data.sort do |row1,row2|
42
+ res = 0
43
+ column_indices.each do |col|
44
+ res = row1[col] <=> row2[col] if res == 0
45
+ end
46
+ res
47
+ end
48
+
49
+ chunk = []
50
+ data.each_with_index do |row,i|
51
+ chunk << row
52
+
53
+ next_row = data[i+1]
54
+
55
+ changed = false
56
+ if next_row.nil? ## end-of-file
57
+ changed = true
58
+ else
59
+ column_indices.each do |col|
60
+ if row[col] != next_row[col]
61
+ changed = true
62
+ break ## out of each column_indices loop
63
+ end
64
+ end
65
+ end
66
+
67
+ if changed
68
+ puts "save new chunk:"
69
+ column_values = column_indices.map {|col| row[col] }
70
+ pp column_values
71
+
72
+ # note: add header(s) row upfront (as first row) to chunk (with unshift)
73
+ chunk_with_headers = chunk.unshift( headers )
74
+ if blk
75
+ yield( column_values, chunk_with_headers )
76
+ else
77
+ ## auto-save (write-to-file) by default - why? why not?
78
+ split_write( path, column_values, chunk_with_headers )
79
+ end
80
+
81
+ chunk = [] ## reset chunk for next batch of records
82
+ end
83
+ end
84
+
85
+ puts 'Done.'
86
+ end ## method self.split
87
+
88
+
89
+ def self.split_write( inpath, values, chunk )
90
+ basename = File.basename( inpath, '.*' )
91
+ dirname = File.dirname( inpath )
92
+
93
+ ## check/change invalid filename chars
94
+ ## e.g. change 1990/91 to 1990-91
95
+ extraname = values.map {|value| value.tr('/','-')}.join('~')
96
+
97
+ outpath = "#{dirname}/#{basename}_#{extraname}.csv"
98
+ puts "saving >#{basename}_#{extraname}.csv<..."
99
+
100
+ CSV.open( outpath, 'w:utf-8' ) do |out|
101
+ chunk.each do |row|
102
+ out << row
103
+ end
104
+ end
105
+ end
106
+
107
+ end # class CsvUtils
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ class CsvUtils
5
+
6
+ ## test or dry run to check if rows can get read/scanned
7
+ def self.test( path, sep: ',' )
8
+ i = 0
9
+ csv_options = { headers: true,
10
+ col_sep: sep,
11
+ ## todo/fix: always (auto-)add utf-8 external encoding!!!
12
+ }
13
+
14
+ CSV.foreach( path, csv_options ) do |row|
15
+ i += 1
16
+ print '.' if i % 100 == 0
17
+ end
18
+
19
+ puts " #{i} rows"
20
+ end
21
+
22
+ end # class CsvUtils
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+
4
+ class CsvUtils
5
+
6
+ def self.header( path, sep: ',' ) ## use header or headers - or use both (with alias)?
7
+
8
+ # read first line (only)
9
+ # and parse with csv to get header from csv library itself
10
+ #
11
+ # check - if there's an easier or built-in way for the csv library
12
+
13
+ line = File.open( path, 'r:utf-8' ) { |f| f.readline }
14
+
15
+ ## e.g.:
16
+ # "Country,League,Season,Date,Time,Home,Away,HG,AG,Res,PH,PD,PA,MaxH,MaxD,MaxA,AvgH,AvgD,AvgA\n"
17
+ pp line
18
+
19
+ csv_options = { col_sep: sep }
20
+ ### external_encoding: 'utf-8' } ## note: always use (assume) utf8 for now
21
+
22
+ ## note: do NOT use headers: true to get "plain" data array (no hash records)
23
+ ## hash record does NOT work for single line/row
24
+ rows = CSV.parse( line, csv_options )
25
+ pp rows
26
+ rows[0] ## return first row
27
+ end # method self.header
28
+
29
+ end # class CsvUtils
@@ -5,8 +5,8 @@
5
5
  class CsvUtils
6
6
 
7
7
  MAJOR = 0 ## todo: namespace inside version or something - why? why not??
8
- MINOR = 0
9
- PATCH = 1
8
+ MINOR = 1
9
+ PATCH = 0
10
10
  VERSION = [MAJOR,MINOR,PATCH].join('.')
11
11
 
12
12
  def self.version
@@ -0,0 +1,363 @@
1
+ Season,Date,Time,Home,Away,HG,AG
2
+ 2016/2017,23/07/16,15:00,Rapid Vienna,Ried,5,0
3
+ 2016/2017,23/07/16,17:30,Altach,AC Wolfsberger,1,0
4
+ 2016/2017,23/07/16,17:30,Sturm Graz,Salzburg,3,1
5
+ 2016/2017,24/07/16,15:30,St. Polten,Austria Vienna,1,2
6
+ 2016/2017,24/07/16,18:00,Mattersburg,Admira,0,1
7
+ 2016/2017,30/07/16,15:00,Salzburg,AC Wolfsberger,1,1
8
+ 2016/2017,30/07/16,17:30,Ried,Sturm Graz,1,0
9
+ 2016/2017,31/07/16,15:30,Altach,Rapid Vienna,1,0
10
+ 2016/2017,31/07/16,15:30,Austria Vienna,Mattersburg,3,1
11
+ 2016/2017,31/07/16,18:00,St. Polten,Admira,2,1
12
+ 2016/2017,06/08/16,15:00,Mattersburg,Sturm Graz,0,2
13
+ 2016/2017,06/08/16,17:30,AC Wolfsberger,Ried,1,0
14
+ 2016/2017,06/08/16,17:30,Admira,Altach,1,2
15
+ 2016/2017,06/08/16,17:30,Salzburg,St. Polten,2,0
16
+ 2016/2017,07/08/16,15:30,Austria Vienna,Rapid Vienna,1,4
17
+ 2016/2017,13/08/16,15:00,Ried,Salzburg,0,2
18
+ 2016/2017,13/08/16,17:30,Altach,St. Polten,3,1
19
+ 2016/2017,13/08/16,17:30,Mattersburg,AC Wolfsberger,3,1
20
+ 2016/2017,13/08/16,17:30,Rapid Vienna,Admira,4,0
21
+ 2016/2017,14/08/16,15:30,Sturm Graz,Austria Vienna,3,1
22
+ 2016/2017,20/08/16,15:00,St. Polten,Sturm Graz,1,3
23
+ 2016/2017,20/08/16,17:30,Admira,Ried,1,0
24
+ 2016/2017,20/08/16,17:30,Salzburg,Mattersburg,3,1
25
+ 2016/2017,21/08/16,15:30,AC Wolfsberger,Rapid Vienna,1,1
26
+ 2016/2017,21/08/16,18:00,Austria Vienna,Altach,3,1
27
+ 2016/2017,27/08/16,15:00,Sturm Graz,Altach,3,1
28
+ 2016/2017,27/08/16,17:30,AC Wolfsberger,Admira,5,0
29
+ 2016/2017,27/08/16,17:30,Mattersburg,St. Polten,1,1
30
+ 2016/2017,28/08/16,15:30,Rapid Vienna,Salzburg,0,0
31
+ 2016/2017,28/08/16,18:00,Ried,Austria Vienna,1,1
32
+ 2016/2017,10/09/16,15:00,Sturm Graz,Rapid Vienna,1,1
33
+ 2016/2017,10/09/16,17:30,Altach,Mattersburg,2,1
34
+ 2016/2017,10/09/16,17:30,Austria Vienna,AC Wolfsberger,4,1
35
+ 2016/2017,10/09/16,17:30,St. Polten,Ried,2,3
36
+ 2016/2017,11/09/16,15:30,Admira,Salzburg,0,4
37
+ 2016/2017,17/09/16,15:00,Ried,Altach,2,1
38
+ 2016/2017,17/09/16,17:30,AC Wolfsberger,St. Polten,1,1
39
+ 2016/2017,17/09/16,17:30,Admira,Sturm Graz,0,3
40
+ 2016/2017,18/09/16,15:30,Salzburg,Austria Vienna,4,1
41
+ 2016/2017,18/09/16,18:00,Rapid Vienna,Mattersburg,3,0
42
+ 2016/2017,24/09/16,15:00,St. Polten,Rapid Vienna,1,1
43
+ 2016/2017,24/09/16,17:30,Austria Vienna,Admira,1,2
44
+ 2016/2017,24/09/16,17:30,Mattersburg,Ried,1,1
45
+ 2016/2017,24/09/16,17:30,Sturm Graz,AC Wolfsberger,3,0
46
+ 2016/2017,25/09/16,15:30,Altach,Salzburg,0,0
47
+ 2016/2017,01/10/16,15:00,AC Wolfsberger,Altach,1,2
48
+ 2016/2017,01/10/16,17:30,Admira,Mattersburg,1,0
49
+ 2016/2017,02/10/16,15:30,Ried,Rapid Vienna,4,2
50
+ 2016/2017,02/10/16,15:30,Salzburg,Sturm Graz,0,1
51
+ 2016/2017,02/10/16,18:00,Austria Vienna,St. Polten,2,1
52
+ 2016/2017,15/10/16,15:00,AC Wolfsberger,Salzburg,2,2
53
+ 2016/2017,15/10/16,17:30,Admira,St. Polten,1,1
54
+ 2016/2017,15/10/16,17:30,Rapid Vienna,Altach,1,1
55
+ 2016/2017,15/10/16,17:30,Sturm Graz,Ried,1,0
56
+ 2016/2017,16/10/16,15:30,Mattersburg,Austria Vienna,0,2
57
+ 2016/2017,22/10/16,15:00,Sturm Graz,Mattersburg,2,2
58
+ 2016/2017,22/10/16,17:30,Altach,Admira,2,0
59
+ 2016/2017,22/10/16,17:30,Ried,AC Wolfsberger,0,1
60
+ 2016/2017,23/10/16,13:00,St. Polten,Salzburg,1,5
61
+ 2016/2017,23/10/16,15:30,Rapid Vienna,Austria Vienna,0,2
62
+ 2016/2017,29/10/16,15:00,Admira,Rapid Vienna,1,2
63
+ 2016/2017,29/10/16,17:30,AC Wolfsberger,Mattersburg,3,0
64
+ 2016/2017,29/10/16,17:30,Salzburg,Ried,1,0
65
+ 2016/2017,29/10/16,17:30,St. Polten,Altach,0,1
66
+ 2016/2017,30/10/16,15:30,Austria Vienna,Sturm Graz,2,0
67
+ 2016/2017,05/11/16,15:00,Sturm Graz,St. Polten,1,2
68
+ 2016/2017,05/11/16,17:30,Ried,Admira,2,1
69
+ 2016/2017,06/11/16,13:00,Rapid Vienna,AC Wolfsberger,0,1
70
+ 2016/2017,06/11/16,15:30,Altach,Austria Vienna,5,1
71
+ 2016/2017,06/11/16,15:30,Mattersburg,Salzburg,2,1
72
+ 2016/2017,19/11/16,15:00,Altach,Sturm Graz,1,1
73
+ 2016/2017,19/11/16,17:30,Admira,AC Wolfsberger,4,1
74
+ 2016/2017,19/11/16,17:30,Austria Vienna,Ried,2,0
75
+ 2016/2017,19/11/16,17:30,St. Polten,Mattersburg,2,2
76
+ 2016/2017,20/11/16,15:30,Salzburg,Rapid Vienna,2,1
77
+ 2016/2017,26/11/16,15:00,Ried,St. Polten,1,2
78
+ 2016/2017,26/11/16,17:30,Mattersburg,Altach,1,2
79
+ 2016/2017,27/11/16,13:00,AC Wolfsberger,Austria Vienna,0,3
80
+ 2016/2017,27/11/16,15:30,Rapid Vienna,Sturm Graz,1,2
81
+ 2016/2017,27/11/16,15:30,Salzburg,Admira,0,1
82
+ 2016/2017,29/11/16,18:00,Altach,Ried,1,0
83
+ 2016/2017,30/11/16,19:30,Austria Vienna,Salzburg,1,3
84
+ 2016/2017,30/11/16,19:30,Mattersburg,Rapid Vienna,1,1
85
+ 2016/2017,30/11/16,19:30,St. Polten,AC Wolfsberger,0,4
86
+ 2016/2017,30/11/16,19:30,Sturm Graz,Admira,0,2
87
+ 2016/2017,03/12/16,15:00,Rapid Vienna,St. Polten,1,0
88
+ 2016/2017,03/12/16,17:30,Admira,Austria Vienna,0,2
89
+ 2016/2017,03/12/16,17:30,Ried,Mattersburg,2,1
90
+ 2016/2017,03/12/16,17:30,Salzburg,Altach,4,1
91
+ 2016/2017,04/12/16,15:30,AC Wolfsberger,Sturm Graz,0,4
92
+ 2016/2017,10/12/16,15:00,Altach,AC Wolfsberger,2,1
93
+ 2016/2017,10/12/16,17:30,Mattersburg,Admira,2,0
94
+ 2016/2017,11/12/16,13:00,Rapid Vienna,Ried,3,1
95
+ 2016/2017,11/12/16,15:30,Sturm Graz,Salzburg,0,1
96
+ 2016/2017,12/12/16,15:30,St. Polten,Austria Vienna,2,1
97
+ 2016/2017,17/12/16,15:00,Ried,Sturm Graz,0,3
98
+ 2016/2017,17/12/16,17:30,Austria Vienna,Mattersburg,2,0
99
+ 2016/2017,17/12/16,17:30,Salzburg,AC Wolfsberger,3,0
100
+ 2016/2017,17/12/16,17:30,St. Polten,Admira,2,2
101
+ 2016/2017,18/12/16,15:30,Altach,Rapid Vienna,3,1
102
+ 2016/2017,11/02/17,15:00,Admira,Altach,1,1
103
+ 2016/2017,11/02/17,17:30,AC Wolfsberger,Ried,1,0
104
+ 2016/2017,11/02/17,17:30,Mattersburg,Sturm Graz,1,0
105
+ 2016/2017,11/02/17,17:30,Salzburg,St. Polten,2,0
106
+ 2016/2017,12/02/17,15:30,Austria Vienna,Rapid Vienna,1,1
107
+ 2016/2017,18/02/17,15:00,Sturm Graz,Austria Vienna,0,4
108
+ 2016/2017,18/02/17,17:30,Altach,St. Polten,1,2
109
+ 2016/2017,18/02/17,17:30,Mattersburg,AC Wolfsberger,2,1
110
+ 2016/2017,18/02/17,17:30,Rapid Vienna,Admira,0,0
111
+ 2016/2017,19/02/17,15:30,Ried,Salzburg,1,6
112
+ 2016/2017,25/02/17,15:00,AC Wolfsberger,Rapid Vienna,2,1
113
+ 2016/2017,25/02/17,17:30,Admira,Ried,1,0
114
+ 2016/2017,25/02/17,17:30,Austria Vienna,Altach,1,3
115
+ 2016/2017,25/02/17,17:30,Salzburg,Mattersburg,1,0
116
+ 2016/2017,26/02/17,15:30,St. Polten,Sturm Graz,2,1
117
+ 2016/2017,04/03/17,15:00,Sturm Graz,Altach,3,0
118
+ 2016/2017,04/03/17,17:30,AC Wolfsberger,Admira,1,1
119
+ 2016/2017,04/03/17,17:30,Mattersburg,St. Polten,1,0
120
+ 2016/2017,04/03/17,17:30,Ried,Austria Vienna,0,3
121
+ 2016/2017,05/03/17,15:30,Rapid Vienna,Salzburg,0,1
122
+ 2016/2017,11/03/17,15:00,St. Polten,Ried,1,0
123
+ 2016/2017,11/03/17,17:30,Admira,Salzburg,1,1
124
+ 2016/2017,11/03/17,17:30,Altach,Mattersburg,3,0
125
+ 2016/2017,11/03/17,17:30,Austria Vienna,AC Wolfsberger,3,0
126
+ 2016/2017,12/03/17,15:30,Sturm Graz,Rapid Vienna,2,1
127
+ 2016/2017,18/03/17,15:00,Rapid Vienna,Mattersburg,1,1
128
+ 2016/2017,18/03/17,17:30,AC Wolfsberger,St. Polten,1,0
129
+ 2016/2017,18/03/17,17:30,Admira,Sturm Graz,1,0
130
+ 2016/2017,18/03/17,17:30,Ried,Altach,2,0
131
+ 2016/2017,19/03/17,15:30,Salzburg,Austria Vienna,5,0
132
+ 2016/2017,01/04/17,15:00,St. Polten,Rapid Vienna,1,1
133
+ 2016/2017,01/04/17,17:30,Austria Vienna,Admira,0,2
134
+ 2016/2017,01/04/17,17:30,Mattersburg,Ried,2,1
135
+ 2016/2017,01/04/17,17:30,Sturm Graz,AC Wolfsberger,4,0
136
+ 2016/2017,02/04/17,15:30,Altach,Salzburg,0,5
137
+ 2016/2017,08/04/17,15:00,Ried,Rapid Vienna,3,0
138
+ 2016/2017,08/04/17,17:30,AC Wolfsberger,Altach,0,0
139
+ 2016/2017,08/04/17,17:30,Admira,Mattersburg,0,2
140
+ 2016/2017,08/04/17,17:30,Austria Vienna,St. Polten,1,2
141
+ 2016/2017,09/04/17,15:30,Salzburg,Sturm Graz,1,0
142
+ 2016/2017,15/04/17,15:00,AC Wolfsberger,Salzburg,0,2
143
+ 2016/2017,15/04/17,17:30,Admira,St. Polten,2,0
144
+ 2016/2017,15/04/17,17:30,Rapid Vienna,Altach,3,0
145
+ 2016/2017,15/04/17,17:30,Sturm Graz,Ried,1,0
146
+ 2016/2017,16/04/17,14:00,Mattersburg,Austria Vienna,0,3
147
+ 2016/2017,22/04/17,15:00,Sturm Graz,Mattersburg,0,2
148
+ 2016/2017,22/04/17,17:30,Altach,Admira,0,0
149
+ 2016/2017,22/04/17,17:30,Ried,AC Wolfsberger,1,1
150
+ 2016/2017,22/04/17,17:30,St. Polten,Salzburg,1,2
151
+ 2016/2017,23/04/17,15:30,Rapid Vienna,Austria Vienna,0,2
152
+ 2016/2017,29/04/17,15:00,Austria Vienna,Sturm Graz,4,1
153
+ 2016/2017,29/04/17,17:30,AC Wolfsberger,Mattersburg,2,2
154
+ 2016/2017,29/04/17,17:30,Salzburg,Ried,1,1
155
+ 2016/2017,29/04/17,17:30,St. Polten,Altach,3,3
156
+ 2016/2017,30/04/17,15:30,Admira,Rapid Vienna,3,2
157
+ 2016/2017,06/05/17,15:00,Mattersburg,Salzburg,2,1
158
+ 2016/2017,06/05/17,17:30,Rapid Vienna,AC Wolfsberger,4,0
159
+ 2016/2017,06/05/17,17:30,Ried,Admira,1,0
160
+ 2016/2017,06/05/17,17:30,Sturm Graz,St. Polten,3,2
161
+ 2016/2017,07/05/17,15:30,Altach,Austria Vienna,1,1
162
+ 2016/2017,13/05/17,15:00,Salzburg,Rapid Vienna,1,0
163
+ 2016/2017,13/05/17,17:30,Admira,AC Wolfsberger,3,2
164
+ 2016/2017,13/05/17,17:30,Austria Vienna,Ried,3,0
165
+ 2016/2017,13/05/17,17:30,St. Polten,Mattersburg,1,0
166
+ 2016/2017,14/05/17,15:30,Altach,Sturm Graz,1,2
167
+ 2016/2017,20/05/17,15:00,Ried,St. Polten,1,1
168
+ 2016/2017,20/05/17,17:30,AC Wolfsberger,Austria Vienna,2,1
169
+ 2016/2017,20/05/17,17:30,Mattersburg,Altach,1,0
170
+ 2016/2017,20/05/17,17:30,Salzburg,Admira,2,0
171
+ 2016/2017,21/05/17,15:30,Rapid Vienna,Sturm Graz,1,0
172
+ 2016/2017,25/05/17,15:30,Altach,Ried,0,2
173
+ 2016/2017,25/05/17,15:30,Austria Vienna,Salzburg,2,3
174
+ 2016/2017,25/05/17,15:30,Mattersburg,Rapid Vienna,1,3
175
+ 2016/2017,25/05/17,15:30,St. Polten,AC Wolfsberger,1,1
176
+ 2016/2017,25/05/17,15:30,Sturm Graz,Admira,2,1
177
+ 2016/2017,28/05/17,15:30,AC Wolfsberger,Sturm Graz,1,0
178
+ 2016/2017,28/05/17,15:30,Admira,Austria Vienna,1,6
179
+ 2016/2017,28/05/17,15:30,Rapid Vienna,St. Polten,2,1
180
+ 2016/2017,28/05/17,15:30,Ried,Mattersburg,2,3
181
+ 2016/2017,28/05/17,15:30,Salzburg,Altach,1,0
182
+ 2017/2018,22/07/17,15:00,Rapid Vienna,Mattersburg,2,2
183
+ 2017/2018,22/07/17,17:30,AC Wolfsberger,Salzburg,0,2
184
+ 2017/2018,22/07/17,17:30,LASK Linz,Admira,3,0
185
+ 2017/2018,23/07/17,15:30,Altach,Austria Vienna,3,0
186
+ 2017/2018,23/07/17,18:00,Sturm Graz,St. Polten,3,2
187
+ 2017/2018,29/07/17,15:00,Salzburg,LASK Linz,1,1
188
+ 2017/2018,29/07/17,17:30,Mattersburg,AC Wolfsberger,1,0
189
+ 2017/2018,29/07/17,17:30,St. Polten,Rapid Vienna,1,4
190
+ 2017/2018,30/07/17,15:00,Austria Vienna,Sturm Graz,2,3
191
+ 2017/2018,30/07/17,17:30,Admira,Altach,4,1
192
+ 2017/2018,05/08/17,15:00,LASK Linz,St. Polten,2,0
193
+ 2017/2018,05/08/17,17:30,Salzburg,Admira,5,1
194
+ 2017/2018,06/08/17,15:30,AC Wolfsberger,Altach,1,0
195
+ 2017/2018,06/08/17,15:30,Rapid Vienna,Austria Vienna,2,2
196
+ 2017/2018,06/08/17,18:00,Mattersburg,Sturm Graz,2,3
197
+ 2017/2018,12/08/17,15:00,Altach,Salzburg,0,1
198
+ 2017/2018,12/08/17,17:30,Austria Vienna,LASK Linz,2,0
199
+ 2017/2018,12/08/17,17:30,St. Polten,Mattersburg,0,0
200
+ 2017/2018,12/08/17,17:30,Sturm Graz,AC Wolfsberger,2,1
201
+ 2017/2018,13/08/17,15:30,Admira,Rapid Vienna,3,1
202
+ 2017/2018,19/08/17,15:00,Rapid Vienna,Sturm Graz,1,2
203
+ 2017/2018,19/08/17,17:30,AC Wolfsberger,Admira,2,0
204
+ 2017/2018,20/08/17,15:30,LASK Linz,Altach,0,0
205
+ 2017/2018,20/08/17,15:30,Salzburg,St. Polten,5,1
206
+ 2017/2018,20/08/17,18:00,Mattersburg,Austria Vienna,1,3
207
+ 2017/2018,26/08/17,15:00,AC Wolfsberger,St. Polten,2,1
208
+ 2017/2018,26/08/17,17:30,Rapid Vienna,LASK Linz,1,0
209
+ 2017/2018,27/08/17,15:30,Altach,Mattersburg,1,0
210
+ 2017/2018,27/08/17,15:30,Sturm Graz,Salzburg,1,0
211
+ 2017/2018,27/08/17,18:00,Admira,Austria Vienna,1,3
212
+ 2017/2018,09/09/17,15:00,LASK Linz,Sturm Graz,2,1
213
+ 2017/2018,09/09/17,17:30,Austria Vienna,AC Wolfsberger,2,2
214
+ 2017/2018,09/09/17,17:30,Mattersburg,Admira,0,5
215
+ 2017/2018,09/09/17,17:30,St. Polten,Altach,1,2
216
+ 2017/2018,10/09/17,15:30,Salzburg,Rapid Vienna,2,2
217
+ 2017/2018,16/09/17,15:00,Altach,Rapid Vienna,2,2
218
+ 2017/2018,16/09/17,17:30,AC Wolfsberger,LASK Linz,0,0
219
+ 2017/2018,16/09/17,17:30,Admira,Sturm Graz,2,1
220
+ 2017/2018,17/09/17,15:30,Mattersburg,Salzburg,1,2
221
+ 2017/2018,17/09/17,18:00,Austria Vienna,St. Polten,5,1
222
+ 2017/2018,23/09/17,15:00,Rapid Vienna,AC Wolfsberger,4,2
223
+ 2017/2018,23/09/17,17:30,LASK Linz,Mattersburg,2,2
224
+ 2017/2018,23/09/17,17:30,St. Polten,Admira,1,1
225
+ 2017/2018,23/09/17,17:30,Sturm Graz,Altach,0,0
226
+ 2017/2018,24/09/17,15:30,Salzburg,Austria Vienna,0,0
227
+ 2017/2018,30/09/17,15:00,St. Polten,Sturm Graz,0,3
228
+ 2017/2018,30/09/17,17:30,Admira,LASK Linz,4,2
229
+ 2017/2018,30/09/17,17:30,Mattersburg,Rapid Vienna,0,1
230
+ 2017/2018,01/10/17,15:30,Austria Vienna,Altach,2,0
231
+ 2017/2018,01/10/17,18:00,Salzburg,AC Wolfsberger,2,1
232
+ 2017/2018,14/10/17,15:00,LASK Linz,Salzburg,1,3
233
+ 2017/2018,14/10/17,17:30,AC Wolfsberger,Mattersburg,2,2
234
+ 2017/2018,14/10/17,17:30,Altach,Admira,2,2
235
+ 2017/2018,14/10/17,17:30,Rapid Vienna,St. Polten,1,0
236
+ 2017/2018,15/10/17,15:30,Sturm Graz,Austria Vienna,3,0
237
+ 2017/2018,21/10/17,15:00,Sturm Graz,Mattersburg,3,2
238
+ 2017/2018,21/10/17,17:30,Altach,AC Wolfsberger,3,2
239
+ 2017/2018,21/10/17,17:30,St. Polten,LASK Linz,0,1
240
+ 2017/2018,22/10/17,13:00,Admira,Salzburg,1,1
241
+ 2017/2018,22/10/17,15:30,Austria Vienna,Rapid Vienna,0,1
242
+ 2017/2018,28/10/17,15:00,Rapid Vienna,Admira,1,0
243
+ 2017/2018,28/10/17,17:30,LASK Linz,Austria Vienna,2,2
244
+ 2017/2018,28/10/17,17:30,Mattersburg,St. Polten,1,1
245
+ 2017/2018,28/10/17,17:30,Salzburg,Altach,2,0
246
+ 2017/2018,29/10/17,15:30,AC Wolfsberger,Sturm Graz,0,2
247
+ 2017/2018,04/11/17,15:00,Sturm Graz,Rapid Vienna,0,0
248
+ 2017/2018,04/11/17,17:30,Admira,AC Wolfsberger,0,0
249
+ 2017/2018,04/11/17,17:30,Altach,LASK Linz,2,4
250
+ 2017/2018,05/11/17,13:00,Austria Vienna,Mattersburg,1,3
251
+ 2017/2018,05/11/17,15:30,St. Polten,Salzburg,1,3
252
+ 2017/2018,18/11/17,15:00,LASK Linz,Rapid Vienna,1,2
253
+ 2017/2018,18/11/17,17:30,Austria Vienna,Admira,2,3
254
+ 2017/2018,18/11/17,17:30,Mattersburg,Altach,1,0
255
+ 2017/2018,18/11/17,17:30,St. Polten,AC Wolfsberger,0,0
256
+ 2017/2018,19/11/17,15:30,Salzburg,Sturm Graz,5,0
257
+ 2017/2018,25/11/17,15:00,Sturm Graz,LASK Linz,1,0
258
+ 2017/2018,25/11/17,17:30,Admira,Mattersburg,2,0
259
+ 2017/2018,25/11/17,17:30,Altach,St. Polten,3,0
260
+ 2017/2018,26/11/17,13:00,AC Wolfsberger,Austria Vienna,1,2
261
+ 2017/2018,26/11/17,15:30,Rapid Vienna,Salzburg,2,3
262
+ 2017/2018,28/11/17,18:00,Sturm Graz,Admira,6,1
263
+ 2017/2018,29/11/17,17:30,LASK Linz,AC Wolfsberger,2,0
264
+ 2017/2018,29/11/17,17:30,Salzburg,Mattersburg,2,0
265
+ 2017/2018,29/11/17,17:30,St. Polten,Austria Vienna,1,0
266
+ 2017/2018,29/11/17,19:30,Rapid Vienna,Altach,1,2
267
+ 2017/2018,02/12/17,15:00,AC Wolfsberger,Rapid Vienna,0,0
268
+ 2017/2018,02/12/17,17:30,Admira,St. Polten,1,0
269
+ 2017/2018,02/12/17,17:30,Altach,Sturm Graz,1,2
270
+ 2017/2018,02/12/17,17:30,Mattersburg,LASK Linz,1,0
271
+ 2017/2018,03/12/17,15:30,Austria Vienna,Salzburg,1,1
272
+ 2017/2018,09/12/17,15:00,Rapid Vienna,Mattersburg,2,2
273
+ 2017/2018,09/12/17,17:30,LASK Linz,Admira,2,1
274
+ 2017/2018,09/12/17,17:30,Sturm Graz,St. Polten,3,2
275
+ 2017/2018,10/12/17,13:00,Altach,Austria Vienna,1,0
276
+ 2017/2018,10/12/17,15:30,AC Wolfsberger,Salzburg,0,0
277
+ 2017/2018,16/12/17,15:00,Salzburg,LASK Linz,0,0
278
+ 2017/2018,16/12/17,17:30,Admira,Altach,3,1
279
+ 2017/2018,16/12/17,17:30,Mattersburg,AC Wolfsberger,5,1
280
+ 2017/2018,16/12/17,17:30,St. Polten,Rapid Vienna,0,5
281
+ 2017/2018,17/12/17,15:30,Austria Vienna,Sturm Graz,1,0
282
+ 2017/2018,03/02/18,15:00,Mattersburg,Sturm Graz,1,0
283
+ 2017/2018,03/02/18,17:30,AC Wolfsberger,Altach,0,0
284
+ 2017/2018,03/02/18,17:30,LASK Linz,St. Polten,2,1
285
+ 2017/2018,03/02/18,17:30,Salzburg,Admira,2,1
286
+ 2017/2018,04/02/18,15:30,Rapid Vienna,Austria Vienna,1,1
287
+ 2017/2018,10/02/18,15:00,Altach,Salzburg,0,1
288
+ 2017/2018,10/02/18,17:30,Austria Vienna,LASK Linz,1,3
289
+ 2017/2018,10/02/18,17:30,St. Polten,Mattersburg,0,3
290
+ 2017/2018,10/02/18,17:30,Sturm Graz,AC Wolfsberger,0,1
291
+ 2017/2018,11/02/18,15:30,Admira,Rapid Vienna,2,1
292
+ 2017/2018,17/02/18,15:00,Rapid Vienna,Sturm Graz,1,1
293
+ 2017/2018,17/02/18,17:30,AC Wolfsberger,Admira,1,3
294
+ 2017/2018,17/02/18,17:30,LASK Linz,Altach,2,0
295
+ 2017/2018,17/02/18,17:30,Mattersburg,Austria Vienna,2,1
296
+ 2017/2018,18/02/18,15:30,Salzburg,St. Polten,4,0
297
+ 2017/2018,24/02/18,15:00,Admira,Austria Vienna,2,1
298
+ 2017/2018,24/02/18,17:30,AC Wolfsberger,St. Polten,0,1
299
+ 2017/2018,24/02/18,17:30,Altach,Mattersburg,1,1
300
+ 2017/2018,24/02/18,17:30,Rapid Vienna,LASK Linz,2,0
301
+ 2017/2018,25/02/18,15:30,Sturm Graz,Salzburg,2,4
302
+ 2017/2018,03/03/18,15:00,LASK Linz,Sturm Graz,0,2
303
+ 2017/2018,03/03/18,17:30,Austria Vienna,AC Wolfsberger,2,0
304
+ 2017/2018,03/03/18,17:30,Mattersburg,Admira,3,2
305
+ 2017/2018,03/03/18,17:30,St. Polten,Altach,1,2
306
+ 2017/2018,04/03/18,15:30,Salzburg,Rapid Vienna,1,0
307
+ 2017/2018,10/03/18,15:00,Altach,Rapid Vienna,0,0
308
+ 2017/2018,10/03/18,17:30,AC Wolfsberger,LASK Linz,0,3
309
+ 2017/2018,10/03/18,17:30,Admira,Sturm Graz,2,4
310
+ 2017/2018,10/03/18,17:30,Austria Vienna,St. Polten,4,0
311
+ 2017/2018,11/03/18,15:30,Mattersburg,Salzburg,2,2
312
+ 2017/2018,17/03/18,15:00,Rapid Vienna,AC Wolfsberger,5,1
313
+ 2017/2018,17/03/18,17:30,LASK Linz,Mattersburg,3,1
314
+ 2017/2018,17/03/18,17:30,St. Polten,Admira,1,2
315
+ 2017/2018,17/03/18,17:30,Sturm Graz,Altach,1,0
316
+ 2017/2018,18/03/18,13:30,Salzburg,Austria Vienna,5,0
317
+ 2017/2018,31/03/18,15:00,Admira,LASK Linz,0,1
318
+ 2017/2018,31/03/18,17:30,Austria Vienna,Altach,2,1
319
+ 2017/2018,31/03/18,17:30,Salzburg,AC Wolfsberger,2,0
320
+ 2017/2018,31/03/18,17:30,St. Polten,Sturm Graz,1,5
321
+ 2017/2018,01/04/18,15:30,Mattersburg,Rapid Vienna,2,4
322
+ 2017/2018,07/04/18,15:00,Sturm Graz,Austria Vienna,0,2
323
+ 2017/2018,07/04/18,17:30,AC Wolfsberger,Mattersburg,0,2
324
+ 2017/2018,07/04/18,17:30,Altach,Admira,1,2
325
+ 2017/2018,07/04/18,17:30,Rapid Vienna,St. Polten,2,1
326
+ 2017/2018,08/04/18,14:00,LASK Linz,Salzburg,1,0
327
+ 2017/2018,14/04/18,15:00,Sturm Graz,Mattersburg,3,0
328
+ 2017/2018,14/04/18,17:30,Altach,AC Wolfsberger,2,1
329
+ 2017/2018,14/04/18,17:30,St. Polten,LASK Linz,1,3
330
+ 2017/2018,15/04/18,15:30,Austria Vienna,Rapid Vienna,0,4
331
+ 2017/2018,15/04/18,18:00,Admira,Salzburg,2,6
332
+ 2017/2018,21/04/18,15:00,AC Wolfsberger,Sturm Graz,2,1
333
+ 2017/2018,21/04/18,17:30,LASK Linz,Austria Vienna,1,0
334
+ 2017/2018,21/04/18,17:30,Mattersburg,St. Polten,1,1
335
+ 2017/2018,22/04/18,13:30,Salzburg,Altach,3,1
336
+ 2017/2018,22/04/18,15:30,Rapid Vienna,Admira,4,1
337
+ 2017/2018,28/04/18,15:00,Austria Vienna,Mattersburg,2,3
338
+ 2017/2018,28/04/18,17:30,Admira,AC Wolfsberger,4,2
339
+ 2017/2018,28/04/18,17:30,Altach,LASK Linz,0,2
340
+ 2017/2018,29/04/18,15:30,Sturm Graz,Rapid Vienna,4,2
341
+ 2017/2018,29/04/18,18:00,St. Polten,Salzburg,0,2
342
+ 2017/2018,05/05/18,15:00,LASK Linz,Rapid Vienna,0,2
343
+ 2017/2018,05/05/18,17:30,Austria Vienna,Admira,0,0
344
+ 2017/2018,05/05/18,17:30,Mattersburg,Altach,0,1
345
+ 2017/2018,05/05/18,17:30,St. Polten,AC Wolfsberger,0,1
346
+ 2017/2018,06/05/18,15:30,Salzburg,Sturm Graz,4,1
347
+ 2017/2018,12/05/18,15:00,Sturm Graz,LASK Linz,3,1
348
+ 2017/2018,12/05/18,17:30,Admira,Mattersburg,1,1
349
+ 2017/2018,12/05/18,17:30,Altach,St. Polten,1,3
350
+ 2017/2018,13/05/18,15:30,Rapid Vienna,Salzburg,1,4
351
+ 2017/2018,15/05/18,18:00,AC Wolfsberger,Austria Vienna,2,1
352
+ 2017/2018,20/05/18,15:30,LASK Linz,AC Wolfsberger,1,3
353
+ 2017/2018,20/05/18,15:30,Rapid Vienna,Altach,4,1
354
+ 2017/2018,20/05/18,15:30,Salzburg,Mattersburg,1,0
355
+ 2017/2018,20/05/18,15:30,St. Polten,Austria Vienna,2,0
356
+ 2017/2018,20/05/18,15:30,Sturm Graz,Admira,2,0
357
+ 2017/2018,27/05/18,16:30,AC Wolfsberger,Rapid Vienna,0,0
358
+ 2017/2018,27/05/18,16:30,Admira,St. Polten,0,2
359
+ 2017/2018,27/05/18,16:30,Altach,Sturm Graz,0,0
360
+ 2017/2018,27/05/18,16:30,Austria Vienna,Salzburg,4,0
361
+ 2017/2018,27/05/18,16:30,Mattersburg,LASK Linz,2,1
362
+ 2017/2018,31/05/18,17:30,Neustadt,St. Polten,0,2
363
+ 2017/2018,03/06/18,14:30,St. Polten,Neustadt,1,1