teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

7

追加

2016/10/13 12:09

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -32,4 +32,45 @@
32
32
  }
33
33
  }
34
34
  }
35
+ ```
36
+
37
+ SJISを想定したperlを作成しました。
38
+
39
+ ```perl
40
+ use utf8;
41
+ use Encode 'decode';
42
+ use Encode 'encode';
43
+
44
+ my $inputfile="chimei1.csv.sjs";
45
+ open (FILE, "<:encoding(cp932)", $inputfile) or die "$!";
46
+ my @lines = <FILE>;
47
+ close(FILE);
48
+
49
+ my $cnt=0;
50
+ $inputfile="chimei2.csv.sjs";
51
+ open(my $data, "<:encoding(cp932)", $inputfile) or die "$!";
52
+ while (my $line = <$data>) {
53
+ $line =~ s/[\r\n]+\z//;
54
+ my @fields = split ",", $line;
55
+ $cnt++;
56
+ $outfile="result". $cnt .".csv.sjs";
57
+ $fields[0] =~ s/^ *(.*?) *$/$1/;
58
+ $fields[1] =~ s/^ *(.*?) *$/$1/;
59
+ $pp="[,]+". $fields[0] ."[,]+";
60
+ $pq="[,]+". $fields[1] ."[,]+";
61
+ foreach my $var(@lines) {
62
+ chomp($var);
63
+ if ($var =~ /($pp)/ or $var =~ /($pq)/){
64
+ if (fileno(OUT)){
65
+ printf OUT "%s\r\n", $var;
66
+ close (OUT);
67
+ }elsif (! fileno(OUT)){
68
+ open (OUT, ">:encoding(cp932)", $outfile) or die "$!";
69
+ printf OUT "%s\r\n", $var;
70
+ }
71
+ }elsif (fileno(OUT)){
72
+ printf OUT "%s\r\n", $var;
73
+ }
74
+ }
75
+ }
35
76
  ```

6

変更

2016/10/13 12:09

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -18,17 +18,17 @@
18
18
  $fields[1] =~ s/^ *(.*?) *$/$1/;
19
19
  $pp="[,]+". $fields[0] ."[,]+";
20
20
  $pq="[,]+". $fields[1] ."[,]+";
21
- foreach (@lines) {
21
+ foreach my $var(@lines) {
22
- if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
22
+ if ($var =~ /($pp)/ or $var =~ /($pq)/){
23
23
  if (fileno(OUT)){
24
- print OUT $_;
24
+ print OUT $var;
25
25
  close (OUT);
26
26
  }elsif (! fileno(OUT)){
27
27
  open (OUT, ">$outfile") or die "$!";
28
- print OUT $_;
28
+ print OUT $var;
29
29
  }
30
30
  }elsif (fileno(OUT)){
31
- print OUT $_;
31
+ print OUT $var;
32
32
  }
33
33
  }
34
34
  }

5

変更

2016/10/13 10:05

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -12,7 +12,6 @@
12
12
  while (my $line = <$data>) {
13
13
  $line =~ s/[\r\n]+\z//;
14
14
  my @fields = split ",", $line;
15
- #print $fields[0] .' '. $fields[1];
16
15
  $cnt++;
17
16
  $outfile="result". $cnt .".csv";
18
17
  $fields[0] =~ s/^ *(.*?) *$/$1/;
@@ -21,14 +20,16 @@
21
20
  $pq="[,]+". $fields[1] ."[,]+";
22
21
  foreach (@lines) {
23
22
  if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
24
- if (! fileno(OUT)){
23
+ if (fileno(OUT)){
24
+ print OUT $_;
25
+ close (OUT);
26
+ }elsif (! fileno(OUT)){
25
27
  open (OUT, ">$outfile") or die "$!";
28
+ print OUT $_;
26
29
  }
30
+ }elsif (fileno(OUT)){
27
31
  print OUT $_;
28
32
  }
29
33
  }
30
- if (fileno(OUT)){
31
- close (OUT);
32
- }
33
34
  }
34
35
  ```

4

修正

2016/10/13 08:26

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -17,8 +17,8 @@
17
17
  $outfile="result". $cnt .".csv";
18
18
  $fields[0] =~ s/^ *(.*?) *$/$1/;
19
19
  $fields[1] =~ s/^ *(.*?) *$/$1/;
20
- $pp="[,]?". $fields[0] ."[,]?";
20
+ $pp="[,]+". $fields[0] ."[,]+";
21
- $pq="[,]?". $fields[1] ."[,]?";
21
+ $pq="[,]+". $fields[1] ."[,]+";
22
22
  foreach (@lines) {
23
23
  if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
24
24
  if (! fileno(OUT)){

3

変更

2016/10/13 08:15

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -17,12 +17,18 @@
17
17
  $outfile="result". $cnt .".csv";
18
18
  $fields[0] =~ s/^ *(.*?) *$/$1/;
19
19
  $fields[1] =~ s/^ *(.*?) *$/$1/;
20
- open (OUT, ">$outfile") or die "$!";
20
+ $pp="[,]?". $fields[0] ."[,]?";
21
+ $pq="[,]?". $fields[1] ."[,]?";
21
22
  foreach (@lines) {
22
- if ($_ =~ /,$fields[0],/ or $_ =~ /,$fields[1],/){
23
+ if ($_ =~ /($pp)/ or $_ =~ /($pq)/){
24
+ if (! fileno(OUT)){
25
+ open (OUT, ">$outfile") or die "$!";
26
+ }
23
27
  print OUT $_;
24
28
  }
25
29
  }
30
+ if (fileno(OUT)){
26
- close (OUT);
31
+ close (OUT);
32
+ }
27
33
  }
28
34
  ```

2

変更

2016/10/13 07:42

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -19,7 +19,7 @@
19
19
  $fields[1] =~ s/^ *(.*?) *$/$1/;
20
20
  open (OUT, ">$outfile") or die "$!";
21
21
  foreach (@lines) {
22
- if ($_ =~ /$fields[0],/ or $_ =~ /$fields[1],/){
22
+ if ($_ =~ /,$fields[0],/ or $_ =~ /,$fields[1],/){
23
23
  print OUT $_;
24
24
  }
25
25
  }

1

変更

2016/10/13 06:54

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -10,7 +10,7 @@
10
10
  $inputfile="chimei2.csv";
11
11
  open(my $data, "<", $inputfile) or die "$!";
12
12
  while (my $line = <$data>) {
13
- chomp $line;
13
+ $line =~ s/[\r\n]+\z//;
14
14
  my @fields = split ",", $line;
15
15
  #print $fields[0] .' '. $fields[1];
16
16
  $cnt++;
@@ -19,7 +19,7 @@
19
19
  $fields[1] =~ s/^ *(.*?) *$/$1/;
20
20
  open (OUT, ">$outfile") or die "$!";
21
21
  foreach (@lines) {
22
- if ($_ =~ /$fields[0]/ or $_ =~ /$fields[1]/){
22
+ if ($_ =~ /$fields[0],/ or $_ =~ /$fields[1],/){
23
23
  print OUT $_;
24
24
  }
25
25
  }