patinfo2csv 1.0.0 → 1.0.1
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.
- data/History.txt +6 -0
- data/README.txt +3 -2
- data/bin/patinfo2csv +10 -10
- data/lib/patinfo2csv/cli.rb +16 -15
- data/lib/patinfo2csv/converter.rb +17 -13
- data/lib/patinfo2csv.rb +103 -78
- data/lib/version.rb +1 -1
- metadata +7 -7
data/History.txt
CHANGED
data/README.txt
CHANGED
@@ -13,13 +13,14 @@ only 4 chapters(de, text) in patinfo.yaml are extracted.
|
|
13
13
|
* usage
|
14
14
|
* composition
|
15
15
|
|
16
|
-
You can specify the
|
16
|
+
You can specify the eancode, see `patinfo2csv --help`
|
17
17
|
|
18
18
|
== Usage
|
19
19
|
|
20
20
|
$ patinfo2csv --help
|
21
|
-
Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input
|
21
|
+
Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input eancode.txt> [-l (de|fr)]
|
22
22
|
-v, --version Show version
|
23
|
+
-l, --lang Language option (de|fr) default de
|
23
24
|
-h, --help Print this help message
|
24
25
|
|
25
26
|
== Requirements
|
data/bin/patinfo2csv
CHANGED
@@ -11,7 +11,7 @@ LANGUAGE = [
|
|
11
11
|
|
12
12
|
argv = ARGV.dup
|
13
13
|
opts = Slop.parse! argv, :help => true do
|
14
|
-
banner "Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input
|
14
|
+
banner "Usage: patinfo2csv <input patinfo.yaml> <output patinfo.csv> <input eancode.txt> [-l (de|fr)]"
|
15
15
|
on :v, :version, 'Show version'
|
16
16
|
on :l, :lang, 'Language option (de|fr) default de', :argument => true
|
17
17
|
end
|
@@ -23,6 +23,15 @@ else
|
|
23
23
|
lang = "de"
|
24
24
|
end
|
25
25
|
|
26
|
+
root = Pathname.new(__FILE__).realpath.parent.parent
|
27
|
+
$:.unshift root.join('lib') if $0 == __FILE__
|
28
|
+
|
29
|
+
if opts.version? then
|
30
|
+
require 'version'
|
31
|
+
puts "patinfo2csv " + Patinfo2csv::VERSION + "\n"
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
26
35
|
if argv.empty? \
|
27
36
|
or !argv.length.eql? 3 \
|
28
37
|
or !File.exist?(argv[0]) \
|
@@ -32,14 +41,5 @@ if argv.empty? \
|
|
32
41
|
exit
|
33
42
|
end
|
34
43
|
|
35
|
-
root = Pathname.new(__FILE__).realpath.parent.parent
|
36
|
-
$:.unshift root.join('lib') if $0 == __FILE__
|
37
|
-
|
38
|
-
if opts.version? then
|
39
|
-
require 'patinfo2csv/version'
|
40
|
-
puts "patinfo2csv " + Patinfo2csv::VERSION + "\n"
|
41
|
-
exit
|
42
|
-
end
|
43
|
-
|
44
44
|
require 'patinfo2csv'
|
45
45
|
Patinfo2csv::CLI.run(argv[0], argv[2], argv[1], lang)
|
data/lib/patinfo2csv/cli.rb
CHANGED
@@ -7,22 +7,23 @@ require 'patinfo2csv'
|
|
7
7
|
module Patinfo2csv
|
8
8
|
class CLI
|
9
9
|
class << self
|
10
|
-
# Param:: patinfo.yaml
|
11
|
-
# Param::
|
12
|
-
# Param:: patinfo.csv
|
13
|
-
|
10
|
+
# Param:: patinfo_yaml patinfo.yaml
|
11
|
+
# Param:: code_txt eancode.txt
|
12
|
+
# Param:: output_file patinfo.csv
|
13
|
+
# Param:: lang (de|fr)
|
14
|
+
def run(patinfo_yaml, code_txt, output_file, lang)
|
14
15
|
cv = Patinfo2csv::Converter.new()
|
15
|
-
cv.lang
|
16
|
-
cv.
|
17
|
-
cv.
|
16
|
+
cv.lang = lang
|
17
|
+
cv.patinfos = self.load_yaml(patinfo_yaml)
|
18
|
+
cv.codes = self.parse_txt(code_txt)
|
18
19
|
rows = cv.to_csv
|
19
|
-
self.output_rows(rows,
|
20
|
-
report(rows, cv.
|
20
|
+
self.output_rows(rows, output_file)
|
21
|
+
report(rows, cv.codes, lang)
|
21
22
|
end
|
22
|
-
def load_yaml(
|
23
|
+
def load_yaml(patinfo_yaml)
|
23
24
|
# before yaml loading, replace escaped chars
|
24
25
|
file = ''
|
25
|
-
File.open(
|
26
|
+
File.open(patinfo_yaml, "r:ascii:utf-8") { |f|
|
26
27
|
while line = f.gets
|
27
28
|
ESCAPED_STR_CODE_MAP.each do |code, char|
|
28
29
|
line.gsub!(code, char)
|
@@ -33,18 +34,18 @@ module Patinfo2csv
|
|
33
34
|
fh = StringIO.new file
|
34
35
|
YAML.load_documents(fh) # utf-8
|
35
36
|
end
|
36
|
-
def parse_txt(
|
37
|
+
def parse_txt(code_txt)
|
37
38
|
codes = []
|
38
|
-
File.open(
|
39
|
+
File.open(code_txt, "r:utf-8") do |input|
|
39
40
|
while line=input.gets
|
40
41
|
codes << line.gsub(/[^\d]/, '').chomp
|
41
42
|
end
|
42
43
|
end
|
43
44
|
codes
|
44
45
|
end
|
45
|
-
def output_rows(rows,
|
46
|
+
def output_rows(rows, output_file)
|
46
47
|
return unless rows
|
47
|
-
open(
|
48
|
+
open(output_file, "w:utf-8") do |out|
|
48
49
|
rows.each do |row|
|
49
50
|
out.print row, "\n"
|
50
51
|
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
|
4
4
|
module Patinfo2csv
|
5
5
|
class Converter
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :patinfos, :codes, :lang
|
7
7
|
attr_reader :rows
|
8
8
|
CHAPTERS = [
|
9
9
|
:effects,
|
@@ -14,32 +14,36 @@ module Patinfo2csv
|
|
14
14
|
]
|
15
15
|
DELIMITER = ';'
|
16
16
|
def initialize
|
17
|
-
@lang
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@rows
|
17
|
+
@lang = "de"
|
18
|
+
@patinfos = []
|
19
|
+
@codes = []
|
20
|
+
@rows = []
|
21
21
|
end
|
22
22
|
def to_csv
|
23
23
|
data = []
|
24
|
-
@
|
24
|
+
@patinfos.each_with_index do |row, index|
|
25
25
|
target = []
|
26
26
|
next if row['article_codes'].nil?
|
27
|
-
row['article_codes'].each do |
|
28
|
-
if @
|
29
|
-
target <<
|
30
|
-
@
|
27
|
+
row['article_codes'].each do |article|
|
28
|
+
if @codes.include?(article[:article_ean13]) # EAN
|
29
|
+
target << article[:article_ean13]
|
30
|
+
@codes.delete(article[:article_ean13])
|
31
|
+
#elsif @code.include?(code[:article_pcode]) # Pharmacode
|
32
|
+
# target << code[:article_pcode]
|
33
|
+
# @code.delete(code[:article_pcode])
|
31
34
|
end
|
32
35
|
end
|
33
36
|
next if target.empty?
|
34
37
|
chapters = extract_chapters(row)
|
35
38
|
next if chapters.empty?
|
36
|
-
target.each do |
|
37
|
-
@rows << [%Q!"#{
|
39
|
+
target.each do |code|
|
40
|
+
@rows << [%Q!"#{code}"!, chapters].flatten.join(DELIMITER)
|
38
41
|
end
|
39
42
|
end
|
40
43
|
unless @rows.empty? #header
|
41
44
|
@rows.unshift([
|
42
|
-
"
|
45
|
+
"EAN",
|
46
|
+
#"Pharmacode",
|
43
47
|
"Effects",
|
44
48
|
"Contra Indication",
|
45
49
|
"Pregnancy",
|
data/lib/patinfo2csv.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
|
-
require '
|
4
|
+
require 'version'
|
5
5
|
require 'patinfo2csv/cli'
|
6
6
|
require 'patinfo2csv/converter'
|
7
7
|
|
@@ -10,82 +10,107 @@ module Patinfo2csv
|
|
10
10
|
# escaped backslash and utf-8 code map
|
11
11
|
# for patinfo.yaml(ASII)
|
12
12
|
ESCAPED_STR_CODE_MAP = {
|
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
|
-
|
13
|
+
/\\x24/ => "$",
|
14
|
+
/\\x25/ => "%",
|
15
|
+
/\\x26/ => "&",
|
16
|
+
/\\x2D/ => "-",
|
17
|
+
/\\x5F/ => "_",
|
18
|
+
/\\xC2\\xA0/ => " ",
|
19
|
+
/\\xC2\\xAB/ => "«",
|
20
|
+
/\\xC2\\xBB/ => "»",
|
21
|
+
/\\xC2\\xAE/ => "®",
|
22
|
+
/\\xC2\\xA9/ => "©",
|
23
|
+
/\\xC2\\xB5/ => "µ",
|
24
|
+
/\\xC2\\xBD/ => "½",
|
25
|
+
/\\xC2\\xBC/ => "¼",
|
26
|
+
/\\xC2\\xBE/ => "¾",
|
27
|
+
/\\xC2\\x[A-z0-9]{2}/ => "",
|
28
|
+
/\\xC3\\x82/ => "Â",
|
29
|
+
/\\xC3\\x83/ => "Ã",
|
30
|
+
/\\xC3\\x84/ => "Ä",
|
31
|
+
/\\xC3\\x85/ => "Å",
|
32
|
+
/\\xC3\\x86/ => "Æ",
|
33
|
+
/\\xC3\\x87/ => "Ç",
|
34
|
+
/\\xC3\\x88/ => "È",
|
35
|
+
/\\xC3\\x89/ => "É",
|
36
|
+
/\\xC3\\x8A/ => "Ê",
|
37
|
+
/\\xC3\\x8B/ => "Ë",
|
38
|
+
/\\xC3\\x8C/ => "Ì",
|
39
|
+
/\\xC3\\x8D/ => "Í",
|
40
|
+
/\\xC3\\x8E/ => "Î",
|
41
|
+
/\\xC3\\x8F/ => "Ï",
|
42
|
+
/\\xC3\\x90/ => "Ð",
|
43
|
+
/\\xC3\\x91/ => "Ñ",
|
44
|
+
/\\xC3\\x92/ => "Ò",
|
45
|
+
/\\xC3\\x93/ => "Ó",
|
46
|
+
/\\xC3\\x94/ => "Ô",
|
47
|
+
/\\xC3\\x95/ => "Õ",
|
48
|
+
/\\xC3\\x96/ => "Ö",
|
49
|
+
/\\xC3\\x97/ => "×",
|
50
|
+
/\\xC3\\x98/ => "Ø",
|
51
|
+
/\\xC3\\x99/ => "Ù",
|
52
|
+
/\\xC3\\x9A/ => "Ú",
|
53
|
+
/\\xC3\\x9B/ => "Û",
|
54
|
+
/\\xC3\\x9C/ => "Ü",
|
55
|
+
/\\xC3\\x9D/ => "Ý",
|
56
|
+
/\\xC3\\x9E/ => "Þ",
|
57
|
+
/\\xC3\\x9F/ => "ß",
|
58
|
+
/\\xC3\\xA0/ => "à",
|
59
|
+
/\\xC3\\xA1/ => "á",
|
60
|
+
/\\xC3\\xA2/ => "â",
|
61
|
+
/\\xC3\\xA3/ => "ã",
|
62
|
+
/\\xC3\\xA4/ => "ä",
|
63
|
+
/\\xC3\\xA5/ => "å",
|
64
|
+
/\\xC3\\xA6/ => "æ",
|
65
|
+
/\\xC3\\xA7/ => "ç",
|
66
|
+
/\\xC3\\xA8/ => "è",
|
67
|
+
/\\xC3\\xA9/ => "é",
|
68
|
+
/\\xC3\\xAA/ => "ê",
|
69
|
+
/\\xC3\\xAB/ => "ë",
|
70
|
+
/\\xC3\\xAC/ => "ì",
|
71
|
+
/\\xC3\\xAD/ => "í",
|
72
|
+
/\\xC3\\xAE/ => "î",
|
73
|
+
/\\xC3\\xAF/ => "ï",
|
74
|
+
/\\xC3\\xB0/ => "ð",
|
75
|
+
/\\xC3\\xB1/ => "ñ",
|
76
|
+
/\\xC3\\xB2/ => "ò",
|
77
|
+
/\\xC3\\xB3/ => "ó",
|
78
|
+
/\\xC3\\xB4/ => "ô",
|
79
|
+
/\\xC3\\xB5/ => "õ",
|
80
|
+
/\\xC3\\xB6/ => "ö",
|
81
|
+
/\\xC3\\xB7/ => "÷",
|
82
|
+
/\\xC3\\xB8/ => "ø",
|
83
|
+
/\\xC3\\xB9/ => "ù",
|
84
|
+
/\\xC3\\xBA/ => "ú",
|
85
|
+
/\\xC3\\xBB/ => "û",
|
86
|
+
/\\xC3\\xBC/ => "ü",
|
87
|
+
/\\xC3\\xBD/ => "ý",
|
88
|
+
/\\xC3\\xBE/ => "þ",
|
89
|
+
/\\xC3\\xBF/ => "ÿ",
|
90
|
+
/\\xC3\\x[A-z0-9]{2}/ => "",
|
91
|
+
/\\xE2\\x80\\x90/ => "‐",
|
92
|
+
/\\xE2\\x80\\x91/ => "‑",
|
93
|
+
/\\xE2\\x80\\x92/ => "‒",
|
94
|
+
/\\xE2\\x80\\x93/ => "–",
|
95
|
+
/\\xE2\\x80\\x94/ => "—",
|
96
|
+
/\\xE2\\x80\\x95/ => "―",
|
97
|
+
/\\xE2\\x80\\x98/ => "‘",
|
98
|
+
/\\xE2\\x80\\x99/ => "’",
|
99
|
+
/\\xE2\\x80\\x9A/ => "‚",
|
100
|
+
/\\xE2\\x80\\x9B/ => "‛",
|
101
|
+
/\\xE2\\x80\\x9C/ => "“",
|
102
|
+
/\\xE2\\x80\\x9D/ => "”",
|
103
|
+
/\\xE2\\x80\\x9E/ => "„",
|
104
|
+
/\\xE2\\x80\\x9F/ => "‟",
|
105
|
+
/\\xE2\\x80\\xA6/ => "…",
|
106
|
+
/\\xE2\\x80\\xB0/ => "‰",
|
107
|
+
/\\xE2\\x80\\xB1/ => "‱",
|
108
|
+
/\\xE2\\x80\\xB2/ => "′",
|
109
|
+
/\\xE2\\x80\\xB3/ => "″",
|
110
|
+
/\\xE2\\x80\\xB4/ => "‴",
|
111
|
+
/\\xE2\\x80\\xB5/ => "‵",
|
112
|
+
/\\xE2\\x80\\xB6/ => "‶",
|
113
|
+
/\\xE2\\x80\\xB7/ => "‷",
|
114
|
+
/\\xE2\\x[A-z0-9]{2}\\x[A-z0-9]{2}/ => "",
|
90
115
|
}
|
91
116
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: patinfo2csv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rdoc
|
16
|
-
requirement: &
|
16
|
+
requirement: &10742100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '3.10'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *10742100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hoe
|
27
|
-
requirement: &
|
27
|
+
requirement: &10741680 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: '2.13'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10741680
|
36
36
|
description: ! 'Patinfo2csv extracts and converts patinfo.yaml to patinfo.csv;
|
37
37
|
|
38
38
|
only 4 chapters(de, text) in patinfo.yaml are extracted.
|
@@ -49,7 +49,7 @@ description: ! 'Patinfo2csv extracts and converts patinfo.yaml to patinfo.csv;
|
|
49
49
|
* composition
|
50
50
|
|
51
51
|
|
52
|
-
You can specify the
|
52
|
+
You can specify the eancode, see `patinfo2csv --help`'
|
53
53
|
email:
|
54
54
|
- yasaka@ywesee.com, zdavatz@ywesee.com
|
55
55
|
executables:
|