No.4ベストアンサー
- 回答日時:
> CSV ファイルが日付別で毎日作成されていくので、当日の最初の1件目は前日(前日のファイルがない場合は前々日)のファイルの最終行を取得するような流れになりますか?
少し勘違いしていました。
日付ごとに連番はリセットされるわけじゃないんですね。
ずっと増え続けていくなら・・・
1: 連番だけを管理するファイルをひとつ作成して、そこから採番する
2: CSVファイル内の連番をゼロパディングする(一日の中で重複しない程度の桁数で)
って考え方がよいのではないかと思います。
1の場合は、カウンタだけのファイルとしてファイル開いてデータ取ってきてプラス1して保存。
renban.txtとかにカウンタだけ格納する。抜き出してプラス1して保存の繰り返し。
2の場合は、日付と連番を文字列結合すれば重複しない番号が作れます。
仮にファイル名がYYYYMMDDで連番の桁数が4桁なら12桁の番号になる
20120106.csvでひとつ前のデータの連番が0003なら次は0004
日付をまたいだ通し番号としたいなら201201060004
(10桁超えるとINTじゃなくなるので計算処理が入るなら注意)
前日のデータの末番を取ってきても出来ない事はないですが、少しややこしくなりそうです。
No.3
- 回答日時:
#1です
同じファイルにデータがたまっていくなら、単純に「連番」列をCSVの項目に持たせる事が一番簡単だと思います。
勝手な想像ですが「追記」モードでファイルに書き足していく感じのような気がしたので、書き込み前に一度読み込んで、最下行の連番を取得して、それにプラス1した値を追記してやるのがよいかと思います。
なので
$fp = fopen('20120102.csv', "a+");
的な感じで開いて、その後にロック
flock($fp);
でロックしてやれば、連番の不整合も防ぐ事が出来ます。
ロック出来たら最下行を取得して、その中の連番の最大値にプラス1した値を今回追記するデータとしてセット。
書きこんだらロックを解放してファイルを閉じておしまい。
ただ開いてる時にアクセスされると待ちが発生するので頻繁にアクセスがあるなら、改善した方がよいかもしれません。
他の方も書いてますがDB使える環境であれば、DBの方がなにかと管理しやすいですよ。
この回答への補足
CSV ファイルが日付別で毎日作成されていくので、当日の最初の1件目は前日(前日のファイルがない場合は前々日)のファイルの最終行を取得するような流れになりますか?
であれば、フォームごとに接頭辞として識別できる番号数桁(4桁を考えています)orアルファベットを使用してセットしてしまう方が簡単でしょうか。
ファイルのオープン、ロックは分かりましたので連番にする部分のコードも教えていただければと思います。よろしくお願いいたします。
No.2
- 回答日時:
DBを使っていないと仮定します。
方法1:
CSVファイルの通し番号の最大値を意味する値をテキストファイルnumber.txtに保存しておきます。
フォームを表示する際、number.txtから最大値+1の値を作成し、
それをフォームの隠し番号としておき、submitボタン押下にてフォーム内容と隠し番号をCSVファイルに保存します。
そのときnumber.txtの最大値も書き換えます。
フォームに隠し番号を持たせるような変更が必要になります。
原理は以上のとおりですが、同時書き込みに対して厳密性を求めるなら、number.txt用のロックファイルを別途用意するなどの工夫は必要になります。
方法2:
submitボタン押下でCSVファイルに保存するとき、CSVファイルの最下行の通し番号を取得し、それに+1した値を通し番号としてCSVファイルに追記する
まあ、方法2が楽かな。ただDB使った方が今後なにか拡張するときトータルで考えると楽ではある。
No.1
- 回答日時:
CSVファイルが複数存在するって事ですよね?
ファイル自体は同じディレクトリにある想定ですが・・・
ディレクトリを読み込んで、ファイルの数を数えてプラス1が新しく作成される通し番号でいいんじゃないですかね?
あとはタイムスタンプが新しいファイルを見つけて、その中の通し番号プラス1とか。
ファイル名自体に通し番号を入れた方が処理は簡単かもしれませんね。
同時にアクセスされたときにその番号が破たんしないように、気をつけてやれば実現方法はどれでも可能だと思います。
ありがとうございます。フォームのphpファイルは複数、たまっていくcsvファイルはひとつです。
そしてcsvファイルは1日1ファイル生成されることになっています。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- PHP php 入力画面から確認表示画面へ情報の受け渡しについて。 1 2023/06/07 18:00
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- JavaScript javascriptで入力フォームが空欄の時にアラートによるエラーを出すコードを書いています。 2 2023/06/13 17:58
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Access VBA を利用して、フォル...
-
共有フォルダに誰が何にアクセ...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
月が変わったら自動でシートが...
-
【アクセス】「ほかのユーザー...
-
excelを共有ファイルにすると行...
-
tmpファイル なぜできる?削除...
-
httpの画像urlが作りたいんです...
-
Excel VBA 処理後データが重た...
-
C言語でのこぎり波を作る方法
-
ACCESSのDoCmd.TransferText
-
エクセルで上書き保存する度に...
-
拡張子が「cda」のファイルを聞...
-
EXCELで列単位でスクロールさせ...
-
ファイルの途中に文字列を挿入
-
Excelの複数人での参照について
-
(Excelマクロ)datファイルをエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
共有フォルダに誰が何にアクセ...
-
【Excel】[Expression.Error] ...
-
特定のエクセルファイルを起動...
-
Batch: フォルダ内の特定のファ...
-
VBAでCSVファイルが使用中かど...
-
月が変わったら自動でシートが...
-
AccessVBAで作成したExcelファ...
-
tmpファイル なぜできる?削除...
-
Access VBA を利用して、フォル...
-
(Excelマクロ)datファイルをエ...
-
事務の派遣で働いています。多...
-
Excel VBA 処理後データが重た...
-
excelを共有ファイルにすると行...
-
【アクセス】「ほかのユーザー...
-
XMLデータを変換し印刷する方法
-
CSVの項目行を削除して一つのフ...
-
mdbファイル フォームを開くと...
-
社内Excel共有ブックでの保存ト...
-
ファイルの途中に文字列を挿入
-
拡張子が「cda」のファイルを聞...
おすすめ情報