![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.8
- 回答日時:
どういう状態になっているのか確認したいので、
以下のコード片を jcode::convert した直後辺りに入れてみて
結果を教えてもらえますか?
my $crcnt = (() = $eachtxt =~ m/\r/g);
my $lfcnt = (() = $eachtxt =~ m/\n/g);
my $crlfcnt = (() = $eachtxt =~ m/\r\n/g);
my @last5 = unpack 'H2'x5, substr($eachtxt, -5);
printf "CR=%d, LF=%d, CRLF=%d, %s\n",$crcnt, $lfcnt, $crlfcnt, join(':', @last5);
再回答ありがとうございます。
試してみましたが、内部エラーが出てだめでした。
文法的には大丈夫のはずなのですが、プログラムを作り変えた
せいかも知れません。
ログイン情報を書き込むルーチンを作り、そこでLocationで
URLに飛ばす仕様にしてみました。
sub do_login {
undef @txt;
undef %cookie;
$cookie{'mynum'} = $mynum;
$cookie{'mypass'} = $mypass;
&print_cookie($cookiename, $cookiedays);
&verify_num($mynum);
&verify_pass($mynum, $mypass);
&read_txt2;
foreach $eachtxt (@txt) {
chomp $eachtxt;
($tonum, $name, $id, $plan, $topass, $month, $submit, $ok, $week, $remain, $tuition, $facility, $text, $admission, $proportion, $course, $ticket, $total, $detail, $premonth, $pretuition, $remark, $login) = split(/,/, $eachtxt);
#$eachtxt =~ s/\x0D\x0A|\x0D|\x0A//g;
if ($tonum eq $mynum) {
$day = substr(&get_date_string,0,11);
#$day =~ tr/-//d;
chomp $day;
$eachtxt = join(',', ($tonum, $name, $id, $plan, $topass, $month, $submit, $ok, $week, $remain, $tuition, $facility, $text, $admission, $proportion, $course, $ticket, $total, $detail, $premonth, $pretuition, $remark, $day));
$eachtxt .= "\r\n";
#my $crcnt = (() = $eachtxt =~ m/\r/g);
#my $lfcnt = (() = $eachtxt =~ m/\n/g);
#my $crlfcnt = (() = $eachtxt =~ m/\r\n/g);
#my @last5 = unpack 'H2'x5, substr($eachtxt, -5);
#print "$crcnt, $lfcnt, $crlfcn";
}
$eachtxt =~ s/\x0A//g;
push @all, $eachtxt;
}
@txt = @all;
&write_txt2;
print "Location: $thisurl?mycmd=read2&mynum=$mynum&mypass=$mypass\n\n";
}
No.7
- 回答日時:
>$eachtxt .= "\r\n";
これだと出力時に、CRCRLF つまり、0D0D0A になると思います。
#6の繰り返しになりますが、内部的には、\n は LF(0A)ですが、出力時に CRLF(0D0A)に変換されますので、
$eachtxt .= "\n";
としたら良いという事になると思いますよ。
>$eachtxt .= "\r\n";
>の処理を加えたあと
>$eachtxt =~ s/\x0A//g;
これだと、CR(0D)になってしまって良くない気がするんですが、良かったんですか?
そうですよね。理論的にはおっしゃるとおりだと思います。
それで
$eachtxt .= "\n";
でやってみました。
すると、だめでした。↑が出現し、メモ帳で開くと
2行が1行になってしまいました。
この特定のファイルで起こるこの問題本当に不可解です。
しばらく締め切らないのでまたヒントがあったら教えてください。
No.6
- 回答日時:
改行コードについてですが、メモ帳って事は ActivePerl ですよね。
ActivePerlなら、スクリプト内での \n は LF らしいのですが、
ファイルをテキストモードで読み込む場合は CRLF を LF に変換して、
出力時は LF を CRLF に変換するらしいので、
バイナリモードを使わずにテキストファイルを処理する場合は単に \n を改行コードとして扱えば
特に問題は起こらないと思うんですけどね。
>原因不明の改行に悩まされています。
>あるスクリプトを通すと2行だった行が1行になります(csvファイル)。
>$loginのところでおかしい改行が入ってしまいます。
どうおかしいのか、いまいち良く分からないのですが、
1、余計な改行が入ってしまう。
2、入るべき改行が入らない。
3、両方。
どれでしょう?
メモ帳で正しく改行されるのは、CRLF なんで、
入力ファイルをメモ帳で開いて正しく表示されるのなら、そのファイルの改行は CRLF なのでしょう。
で、そのスクリプトを通して出力されたファイルがメモ帳で正しく表示されないのなら、
改行コードが CRLF 以外の物になっている。ただそれだけの事だと思います。
最初に書きましたけど、バイナリモードなら話は別です。
とりあえず、出力されたファイルをバイナリエディタで見てみたらどうでしょう。
もしかしたらできたかも知れません。
おっしゃるとおりバイナリディタとやらで見てみました。
スクリプトを通したときだけODOA(改行)に最後0Aなる文字を発見。
そこで
$eachtxt .= "\r\n";
の処理を加えたあと
$eachtxt =~ s/\x0A//g;
したら、見事大丈夫でした。
$eachtxt .= "\r\n";
をなくしてみたらやっぱり駄目でしたので
なぜか付加しています。
もう少し様子を見て締め切らせて頂きます。
みなさまにとても感謝しております。
No.5
- 回答日時:
>以上のスクリプトは誤解受けてしまいますが、エラーが出て
>いろいろ試している過程でつけました。
から予想ですけど、
>#$eachtxt =~ s/\x0D\x0A|\x0D|\x0A//g;
これで改行コードが消えてただけなんじゃないですか?
とりあえず split する前に chomp して、
必要なら、
>#$eachtxt =~ s/\x0D\x0A|\x0D|\x0A//g;
して、その後 \n を付け足せばいいんじゃないですかね。
回答ありがとうございました。
理論上、そうなるはずが、いろいろやってみましたが、
駄目でした。
特定のテキストファイルのみ変な文字が入ってしまうとは・・・。
Perlむずかしいですね。こういうことよく起こります。
MySQLに移行するのでそちらに移行すれば解消できると
思いつつ、やはりこの問題クリアしたいです。
No.4
- 回答日時:
> $eachtxt =~ s/\r\n/\r/g;
> $eachtxt =~ s/\n/\r/g;
メモ帳が改行として認識できるのは \r \n の並びだけなので、
これを実行して \r にしてしまうと、改行がめちゃくちゃになります。
この回答への補足
以上のスクリプトは誤解受けてしまいますが、エラーが出て
いろいろ試している過程でつけました。
おっしゃるとおり改行はめちゃめちゃになりました。
メモ帳では認識できない改行コードをメモ帳でも認識できる
改行コードに変えればいいはずなのですが・・・。
それを意図しても駄目です。。。
No.3
- 回答日時:
> あるスクリプトを通すと2行だった行が1行になります
そのスクリプトの処理内容を教えてください。
この回答への補足
回答ありがとうございました。
スクリプト、部分的に示しておきます。いろいろ試している状態です。
ちなみにいろいろこのスクリプトは使いまわしており、そのCSVファイル以外は問題ありません。特定のcsvファイルを通すと変な改行コードが現れてしまいます。
&read_txt2;
foreach $eachtxt (@txt) {
($tonum, $name, $id, $plan, $topass, $month, $submit, $ok, $week, $remain, $tuition, $facility, $text, $admission, $proportion, $course, $ticket, $total, $detail, $premonth, $pretuition, $remark, $login) = split(/,/, $eachtxt);
if ($tonum eq $mynum) {
$login = &get_date_string;
$eachtxt = join(',', ($tonum, $name, $id, $plan, $topass, $month, $submit, $ok, $week, $remain, $tuition, $facility, $text, $admission, $proportion, $course, $ticket, $total, $detail, $premonth, $pretuition, $remark, $login));
&jcode'convert(*eachtxt, $kanjicode);
$eachtxt =~ s/\r\n/\r/g;
$eachtxt =~ s/\n/\r/g;
#$eachtxt =~ s/\x0D\x0A|\x0D|\x0A//g;
}
push @all, $eachtxt;
}
@txt = @all;
&write_txt2;
No.2
- 回答日時:
文字コードはShift-JISですけれど,スクリプトが改行コード(行末コード)を書き換えているのでしょう。
http://www.atmarkit.co.jp/fwin2k/win2ktips/403eo …
回答ありがとうございました。
たぶん問題はこれだと思います。
ケタずれの可能性もあるので変数の位置を変えてみたりしました。
$loginのところでおかしい改行が入ってしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 8 メモ帳による文字コード変換 2 2022/09/01 18:38
- フリーソフト AutoHotKeyは別の独立したファイルで 動作させる方法はないのでしょうか 1 2022/09/04 13:14
- Excel(エクセル) widows11のメモ帳でExcelのTXTファイルを開きたい 6 2022/08/23 17:09
- ノートパソコン 「データエラー(CRCエラー)」対応に付いて 15 2022/12/08 09:01
- iPhone(アイフォーン) iPhoneのメモ帳を使ってますが、突然全然違うところに画面がジャンプします。なんですか ?この仕様 1 2022/12/19 09:19
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
- HTML・CSS CSSファイルの日本語コメントが文字化けしてしまう 3 2022/12/26 15:50
- Word(ワード) メモ帳で開くと、文字化けします。文字化けを防ぐ方法を教えてください。 3 2023/04/19 23:48
- その他(買い物・ショッピング) ルーズリーフ型のメモ帳があるのかお店に電話したいのですが、何と説明したらいいのでしょうか? 「とある 2 2022/06/11 09:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
教えて!perlから.exeファイル...
-
log2の「正確な」計算方法
-
重複するデータを抽出できる秀...
-
sprintfで10進数を桁数指定で16...
-
バッチファイルで、記号を含む...
-
timeコマンドの結果をテキスト...
-
VBAでCSVファイルの特定行を書...
-
ExcelをCSV書き出す場合のシー...
-
python renameについて
-
batファイルでrenameができませ...
-
エクセルVBA コードが同じでも...
-
vba dir の相対パス
-
パスから最後のディレクトリだ...
-
close()で例外が投げられる理由
-
VBAでCSVファイルを途中行まで...
-
Perlで特定文字列から特定文字...
-
TSVファイルを読み込んでCSV形...
-
C言語でファイル名を取得
-
ファイルへデータ登録2
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
awkスクリプトでダブルクォーテ...
-
DOSコマンドで、標準出力を出力...
-
sprintfについて
-
エクセルVBAで素数だけを出力す...
-
C言語の問題について
-
Perl<->Oracle間での文字化けに...
-
log2の「正確な」計算方法
-
教えて!perlから.exeファイル...
-
重複するデータを抽出できる秀...
-
Perlでファイルの末尾から指定...
-
CGIから外部コマンド実行時の標...
-
ファイル出力の改行コードをLFに
-
至急お願いします。C言語で.img...
-
LWPでPOST送信した後に送信先に...
-
perlでcsvの出力について
-
バッチファイルで、記号を含む...
-
Perl 内で実行される Perl が S...
-
文字コードの変換(Shift-JISか...
-
Perlでエラーログに日時をつける
-
Active Perl の動作異常について
おすすめ情報