csvutils 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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