回答編集履歴

7

追加

2016/10/13 12:09

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -67,3 +67,85 @@
67
67
  }
68
68
 
69
69
  ```
70
+
71
+
72
+
73
+ SJISを想定したperlを作成しました。
74
+
75
+
76
+
77
+ ```perl
78
+
79
+ use utf8;
80
+
81
+ use Encode 'decode';
82
+
83
+ use Encode 'encode';
84
+
85
+
86
+
87
+ my $inputfile="chimei1.csv.sjs";
88
+
89
+ open (FILE, "<:encoding(cp932)", $inputfile) or die "$!";
90
+
91
+ my @lines = <FILE>;
92
+
93
+ close(FILE);
94
+
95
+
96
+
97
+ my $cnt=0;
98
+
99
+ $inputfile="chimei2.csv.sjs";
100
+
101
+ open(my $data, "<:encoding(cp932)", $inputfile) or die "$!";
102
+
103
+ while (my $line = <$data>) {
104
+
105
+ $line =~ s/[\r\n]+\z//;
106
+
107
+ my @fields = split ",", $line;
108
+
109
+ $cnt++;
110
+
111
+ $outfile="result". $cnt .".csv.sjs";
112
+
113
+ $fields[0] =~ s/^ *(.*?) *$/$1/;
114
+
115
+ $fields[1] =~ s/^ *(.*?) *$/$1/;
116
+
117
+ $pp="[,]+". $fields[0] ."[,]+";
118
+
119
+ $pq="[,]+". $fields[1] ."[,]+";
120
+
121
+ foreach my $var(@lines) {
122
+
123
+ chomp($var);
124
+
125
+ if ($var =~ /($pp)/ or $var =~ /($pq)/){
126
+
127
+ if (fileno(OUT)){
128
+
129
+ printf OUT "%s\r\n", $var;
130
+
131
+ close (OUT);
132
+
133
+ }elsif (! fileno(OUT)){
134
+
135
+ open (OUT, ">:encoding(cp932)", $outfile) or die "$!";
136
+
137
+ printf OUT "%s\r\n", $var;
138
+
139
+ }
140
+
141
+ }elsif (fileno(OUT)){
142
+
143
+ printf OUT "%s\r\n", $var;
144
+
145
+ }
146
+
147
+ }
148
+
149
+ }
150
+
151
+ ```

6

変更

2016/10/13 12:09

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -38,13 +38,13 @@
38
38
 
39
39
  $pq="[,]+". $fields[1] ."[,]+";
40
40
 
41
- foreach (@lines) {
41
+ foreach my $var(@lines) {
42
42
 
43
- if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
43
+ if ($var =~ /($pp)/ or $var =~ /($pq)/){
44
44
 
45
45
  if (fileno(OUT)){
46
46
 
47
- print OUT $_;
47
+ print OUT $var;
48
48
 
49
49
  close (OUT);
50
50
 
@@ -52,13 +52,13 @@
52
52
 
53
53
  open (OUT, ">$outfile") or die "$!";
54
54
 
55
- print OUT $_;
55
+ print OUT $var;
56
56
 
57
57
  }
58
58
 
59
59
  }elsif (fileno(OUT)){
60
60
 
61
- print OUT $_;
61
+ print OUT $var;
62
62
 
63
63
  }
64
64
 

5

変更

2016/10/13 10:05

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -26,8 +26,6 @@
26
26
 
27
27
  my @fields = split ",", $line;
28
28
 
29
- #print $fields[0] .' '. $fields[1];
30
-
31
29
  $cnt++;
32
30
 
33
31
  $outfile="result". $cnt .".csv";
@@ -44,11 +42,21 @@
44
42
 
45
43
  if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
46
44
 
47
- if (! fileno(OUT)){
45
+ if (fileno(OUT)){
46
+
47
+ print OUT $_;
48
+
49
+ close (OUT);
50
+
51
+ }elsif (! fileno(OUT)){
48
52
 
49
53
  open (OUT, ">$outfile") or die "$!";
50
54
 
55
+ print OUT $_;
56
+
51
57
  }
58
+
59
+ }elsif (fileno(OUT)){
52
60
 
53
61
  print OUT $_;
54
62
 
@@ -56,12 +64,6 @@
56
64
 
57
65
  }
58
66
 
59
- if (fileno(OUT)){
60
-
61
- close (OUT);
62
-
63
- }
64
-
65
67
  }
66
68
 
67
69
  ```

4

修正

2016/10/13 08:26

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -36,9 +36,9 @@
36
36
 
37
37
  $fields[1] =~ s/^ *(.*?) *$/$1/;
38
38
 
39
- $pp="[,]?". $fields[0] ."[,]?";
39
+ $pp="[,]+". $fields[0] ."[,]+";
40
40
 
41
- $pq="[,]?". $fields[1] ."[,]?";
41
+ $pq="[,]+". $fields[1] ."[,]+";
42
42
 
43
43
  foreach (@lines) {
44
44
 

3

変更

2016/10/13 08:15

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -36,11 +36,19 @@
36
36
 
37
37
  $fields[1] =~ s/^ *(.*?) *$/$1/;
38
38
 
39
- open (OUT, ">$outfile") or die "$!";
39
+ $pp="[,]?". $fields[0] ."[,]?";
40
+
41
+ $pq="[,]?". $fields[1] ."[,]?";
40
42
 
41
43
  foreach (@lines) {
42
44
 
43
- if ($_ =~ /,$fields[0],/ or $_ =~ /,$fields[1],/){
45
+ if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
46
+
47
+ if (! fileno(OUT)){
48
+
49
+ open (OUT, ">$outfile") or die "$!";
50
+
51
+ }
44
52
 
45
53
  print OUT $_;
46
54
 
@@ -48,7 +56,11 @@
48
56
 
49
57
  }
50
58
 
59
+ if (fileno(OUT)){
60
+
51
- close (OUT);
61
+ close (OUT);
62
+
63
+ }
52
64
 
53
65
  }
54
66
 

2

変更

2016/10/13 07:42

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  foreach (@lines) {
42
42
 
43
- if ($_ =~ /$fields[0],/ or $_ =~ /$fields[1],/){
43
+ if ($_ =~ /,$fields[0],/ or $_ =~ /,$fields[1],/){
44
44
 
45
45
  print OUT $_;
46
46
 

1

変更

2016/10/13 06:54

投稿

A.Ichi
A.Ichi

スコア4070

test CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  while (my $line = <$data>) {
24
24
 
25
- chomp $line;
25
+ $line =~ s/[\r\n]+\z//;
26
26
 
27
27
  my @fields = split ",", $line;
28
28
 
@@ -40,7 +40,7 @@
40
40
 
41
41
  foreach (@lines) {
42
42
 
43
- if ($_ =~ /$fields[0]/ or $_ =~ /$fields[1]/){
43
+ if ($_ =~ /$fields[0],/ or $_ =~ /$fields[1],/){
44
44
 
45
45
  print OUT $_;
46
46