#!/usr/bin/perl
require './jcode.pl';
$file = "houkoku.txt";
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
$value =~ s/</</g;
$value =~ s/>/>/g;
$value =~ s/\t//g;
$value =~ s/\r\n/\n/g;
$value =~ s/\r/\n/g;
$value =~ s/^\s+//;
$value =~ s/\s+$//;
$FORM{$name} .= (defined $FORM{$name}) ? "," . $value : $value;
}
open( WRITE, "+< $file" );
print WRITE $FORM{'name'},",",$FORM{'color'}."\n";
close(WRITE);
foreach ( keys %FORM ) {
if( $FORM{$_} eq '' ) { $FORM{$_} = '入力がありません'; }
}
#if ( $FORM{'name'} eq '' ) { $FORM{'name'} = '入力がありません'; }
if ( $FORM{'color'} eq '' ) { $FORM{'color'} = '入力がありません'; }
print "Content-Type: text/html\n\n";
print <<END_HTML;
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>
<center>
<table border="1">
<td>
$FORM{'name'}</td>
<td>
$FORM{'color'}</td></tr>
</table>
</center>
</body>
</html>
END_HTML
exit;
として、カンマ仕切りでデータを保存できるようになりました。
これを、指定行への書き込みを行いたいのですが、どのようにしたら良いでしょうか。
たとえば、5行目にこのデータを書き込んで、常に5行目を上書き更新するような感じです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
ファイルというものは、原稿用紙のマス目にぎっちり文字を書くようなものだと思ってください。
途中を書き換える、というのは、消しゴムで消して書きなおすようなものです。
元と同じ文字数なら、消したところに書くだけですが、元より短かければその分が空いたままになるし、長ければマスが足りません。
ワープロやエディタのように空きを詰めたり、後へずらしたりしません。
自分で前や後へ書き写す必要があるのです。
この回答への補足
ありがとうございます。
そうですか。難しそうですね。
すると、例えば500人の顧客プロフィールの作成にあたり、
チェックボックスで毎回更新する為には、
500枚の書き込み用.txtファイルが必要ということでしょうか。
よろしくおねがいします。
No.7
- 回答日時:
まずは、問題を分割しましょう。
今ある問題というのは
(1) フォームのチェックボックスに設定した内容を特定の文字列(カンマ区切り)にしたい
(2) (1)の文字列を目的のファイルの特定の箇所に挿入したい:例えば5行目を差し替えたい
(3)(1)→(2)というのがたくさんある。どうやって使いわけるのがいいか
.....
となるのではないでしょうか?
> チェックボックスが空欄な列は、記録されず、,2,4,6と、チェックの入った部分だけが記録されます。
というのは、(1)の問題では?
ありがとうございます。
if (column[0] eq 1 || column[1] eq 1 ・・・というかたちで、
カラムを全部設定して、1 があればcheckd という形にして、解決しました。
しかしビックリするほど長いプログラムになってしまいました。
No.6
- 回答日時:
そうですね, 記録しておくファイルが「テキスト」でなくてもいいならデータベースという方針もありましたね>#4.
「空欄の部分に任意の文字を入れたい」というなら, それは「そのまま」プログラムにすればいい. 現状どんなふうにしていてどう困っているのかは知らんが.
No.5
- 回答日時:
略さず書くと
open my $fh, "<", "file.txt" or die $!;
open my $out, ">", "output.txt";
while (<$fh>) {
if ($. == 5) {
print $out $what_do_you_wish_to_write_here;
} else {
print $out $_;
}
}
close $fh;
close $out;
ということで、#1の全部書き変える方法の事です。
チェックボックス云々はごめんなさい、理解できませんでした。
No.4
- 回答日時:
このプログラムと「常に5行目」と「チェックボックスで更新」の関連がよくわからないんですが。
特定の顧客のデータを変更したい、5行目というのが「顧客番号5番(仮)」で常に5番とは限らない、というのなら、
全体を読み込み→該当行を変更→全部書き戻す(#1にあった方法)が常套手段だと思いますよ。
また、1人1ファイルというのも手段の一つです。
データベースを使うのも手ですし。
この回答への補足
申し訳ありません。
チェックボックスでの読み込みは不完全ながらできました。
しかし、上記のプログラムですと、チェックボックスが空欄な列は、記録されず、
,2,4,6と、チェックの入った部分だけが記録されます。
空欄の部分に任意の文字を入れたいのですが、どのようにしたら良いでしょうか。たとえば、空欄には0を、もしくは、空欄であれば""をといった感じです。
よろしくお願いします。
ありがとうございます。
全体を読み込み→該当行を変更→全部書き戻すを選択した時に、
チェックボックスにて読み込む作業をしたいのですが、
なかなかできません。
たとえば、50人の社員が各々30人の顧客を持っている場合、担当者分50枚のファイルを作成(中に30人の顧客データ)して読み書きをしたいのですが。
どのようにしたら良いでしょうか。ファイルをチェックボックスの形式で読み込んで、全部書き換える感じです。
よろしくお願いします。
No.2
- 回答日時:
適当なファイルハンドル開いて、
print FH $str if $. == 5;
それより、スクリプトが10年以上前にはもう止めになった書き方なので、
use CGI;
my $q = CGI->new;
my $name = $q->escapeHTML( $q->param('name') );
とかにした方が。。。
ファイル上書きじゃなくて、Text::Xslateとかのテンプレートエンジン使って
更新したい部分に値を投げてやるのがイマドキかと思います。
この回答への補足
open( WRITE, "+< $file" );
print WRITE $str if $. == 5;
print WRITE $FORM{'name'},",",$FORM{'color1'}."\n";
close(WRITE);
ということでしょうか・・? 何かうまくいきません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
close()で例外が投げられる理由
-
cgiの投票回数制限設定について...
-
telnet接続
-
perlのflock関数でロックをかけ...
-
VBAでCSVファイルを途中行まで...
-
openした後、closeしないでプロ...
-
VBAでCSVファイルの特定行を書...
-
エクセルVBA コードが同じでも...
-
awkスクリプトでダブルクォーテ...
-
バッチファイルの作り方(CSV→...
-
csvファイルの横方向への改行に...
-
ExcelをCSV書き出す場合のシー...
-
drtファイルはどうしたら開...
-
無料配布の郵便番号自動入力cgi...
-
ファイルからある文字列の個数...
-
Perlで フォルダ内の全て...
-
Perl 特定のフォルダ以外削除
-
JSP URLに表示される拡張子 .jsp
-
csv出力
-
MATLABのm-fileについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
close()で例外が投げられる理由
-
perlのflock関数でロックをかけ...
-
改行コードが勝手に
-
巨大ファイルの行をを逆順に並...
-
オープンしたファイルで行の連結
-
Perl で syntax error
-
where can I buy snowbord in t...
-
perlを用いた特定文字列間の抽...
-
Perlで他サイトの情報を取得し...
-
open中のファイルをrename
-
die関数のエラー出力先について
-
ハッシュにファイルハンドル
-
perlで大容量CSVのsort方法につ...
-
テキストファイルの本文中に行...
-
サブスクリプトとのファイルハ...
-
AutoCADのスクリプト
-
フォルダが開かなくなりました。
-
ジョブショップスケジューリング
-
バッチファイルの作り方(CSV→...
-
awkスクリプトでダブルクォーテ...
おすすめ情報