• 締切済み

重複データの削除方法

data.datのログ形式 先頭、最後は半角カンマ  fgetcsv でdata.datを1行単位で読み込み ,a.hoge@hoge.com, ,ba.hoge@hoge.com, ,c.hoge@hoge.com, ,a.hoge@hoge.com, ,b.hoge@hoge.com, ,c.hoge@hoge.com, 重複した行の1行を削除して詰めてdata.datを上書きする方法の簡単な方法をお願いします。 参考になるようなサンプルコードを書いていただけるとありがたいですが、自力で勉強もしたいので、ヒントや参考サイトがあれば教えて下さい。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>fgetcsv でdata.datを1行単位で読み込み 行単位で重複チェックするのであれば、fgetcsvでない方が楽ではないですか?極端な話、   $array = array_unique(file('data.dar')); として$arrayをdata.datに上書きしてもいいのでは?

関連するQ&A

  • 重複データを削除して上書きする

    data.datファイルには hoge@hoge.com, hoge1@hoge.com, hoge2@hoge.com, hoge3@hoge.com, hoge4@hoge.com, hoge5@hoge.com, hoge6@hoge.com, hoge7@hoge.com, hoge8@hoge.com, hoge9@hoge.com, hoge@hoge.com, hoge1@hoge.com, hoge2@hoge.com, hoge3@hoge.com, hoge10@hoge.com PHPファイルは↓です。 <?php //ファイルの内容を配列に格納 $lines = file( 'data.dat' ); //重複ファイル削除 $array = array_unique($lines); //配列の全要素に対して処理を行う foreach( $array as $line ){ print "$line<br>\n"; } ?> 重複したファイルを削除して表示することはできましたが、新しいデータをdata.datファイルに書き込む場合はどうしたらよいでしょうか? 重複ファイルだけdata.datファイルから削除して、削除された行を詰めて上書きしたほうがよいのでしょうか? 他に、いい方法があればアドバイス下さい。

    • 締切済み
    • PHP
  • 重複データの削除

    お世話になります。 現在、仕事でお客様のデータ(5万件くらい)を扱っています。 しかしデータをエクセルに取り込むシステムに難があり、同じお客様のデータを重複して取り込んでしまうことがあります。 そこで質問ですが、約5万件あるデータの中から効率よく重複データを削除する方法はありますか? 懸念事項は、同姓同名の方は削除してはいけないという点です。 データ項目は「名前」「住所」「生年月日」「性別」とあるので、 同姓同名でも生年月日や住所で判定することができます。 ちなみに私の考えは、 A列に名前、B列に生年月日とすると・・・ 1)ソート:優先順位はA列⇒B列 2)C列にIF(A1=A2,"重複","OK")として行方向へコピー   D列にIF(B1=B2,"重複","OK")として行方向へコピー   E列にIF(AND(IF(C1="重複",D1="重複")=TRUE,"重複","OK")として行方向へコピー 3)E列で"重複"でフィルタリングし、フィルタされた行の削除 スマートではないですが、私の知識では精一杯です。 何かスマートな方法はないものでしょうか? よろしくお願いいたします。

  • VBA教えてください。重複データの削除

    エクセルからエクセルへのデータ取り込み、重複データ削除の方法について、とても時間がかかっており、ご教授いただきたいと思い、質問させていただきます。 よろしくお願い致します。 台帳(エクセル)とシステムから出力するcsvファイル(エクセル)があります。 csvファイル(エクセル)のデータを、台帳(エクセル)で管理します。 ‘csvファイル:商品コード、商品名、注文日、納期、などなどA~AZ列まで、1行目は項目名で、その後、1行1商品で2000行ほどデータがあります。 現在進行形のデータが全て出力されるため、台帳にあるデータと重複するものと、新規データがあり、新規データのみを台帳に追加していきたいです。 重複かどうかの判断は、A列の通し番号で判断しています。 台帳:シート4つで進捗を管理しています。 シート(1);csvファイルからデータを取り込むシート      一度出力データ全てを取り込み(※1)、シート(2)、(3)に重複があるデータを削除します(※2)。 シート(2):(1)から次工程にデータを送ったらこちらに移動(0~500行ほどあります) シート(3):(2)から次工程にデータを送ったらこちらに移動(5000行ほどあります) ※1は3秒ほどで完了するのですが、※2は1分近く時間を要しています。 もう少し短くならないかと思うのですが、いかがでしょうか。よろしくお願い致します。早ければ早いほどいいですが、10秒以内を目標にしています。 今は、csvファイルから全データをエクセルに取り込んでから(3秒ほど)、重複削除していますが、csvファイルから取り込むときに、重複データを取り込まないほうがいいのでしょうか。 現状、このような感じです。 Sub 重複削除() Dim i As Long Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ‘BA列にある重複チェックが2以上のとき、削除 For i = 5000 To 5 Step -1  If Worksheets("(1)").Cells(i, 53).Value > 1 Then Rows(i).Delete End If Next i ‘BA列に重複チェックを再設定 Application.Calculation = xlCalculationAutomatic Cells(5, 1).Select Range("BA5") = "IF(A5="""","""",COUNTIF($A$4:$A5,A5)+COUNTIF((2)!$A:$A,A5)+COUNTIF((3)!$A:$A,A5))" Range("BA5").Select Selection.Copy ‘関数を値へ変換 Range("BA6:BA2000").Select ActiveSheet.Paste Application.CutCopyMode = False ‘行幅を整える Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select Selection.RowHeight = 15.75 Range("A5").Select Application.ScreenUpdating = True '画面描画を静止 End Sub

  • エクセル教えてください 重複データの削除方法

    エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

  • Excel2003で重複したデータを削除したい

    Excel2003で重複したデータを削除する方法を教えて下さい。 A・B・C・Dの列の全てが重複するデータを削除したいのですが、可能ですか?AとB列は重複するけど、CやDのデータは重複していなければ、残しておきたいです。 以下イメージです。 行/列  A   B    C    D 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2 3    なす  商店  200円  3/2 ------------------------------------- 以下、重複データ削除後のイメージ。 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2

  • excelの重複データの削除方法。

    excel2003で重複する値を自動的に削除する方法を探しています。 現在、以下のような手順で作業をしています。     A   B   C 1 ○○○ 100 ABC 2 ▼▼▼ 200 DEF 3 ◇◇◇ 300 GHI 4 ■■■ 400 JKL 5 △△△ 500 MNO ↑の元データに      A   B   C 1 ○○● 100 ABC 2 ◇◆◇ 300 GHI ↑のデータを追加(貼り付け)して並び替えをすると      A   B   C 1 ○○○ 100 ABC 2 ○○● 100 ABC 3 ▼▼▼ 200 DEF 4 ◇◇◇ 300 GHI 5 ◇◆◇ 300 GHI 6 ■■■ 400 JKL 7 △△△ 500 MNO というデータが出来るとします。 「C列の値を基準」として、重複している箇所を検出・削除し (上の例で言えば、1・2・4・5の行。)      A   B   C 1 ▼▼▼ 200 DEF 2 ■■■ 400 JKL 3 △△△ 500 MNO というデータにしたいと考えております。 重複した値のどちらか一方を残す、という方法ではなく、 重複した値の全てを削除する、という方法が解りません。 手作業で1つ1つ削除していけばいいのですが、本物のデータは何千件とあるので 手作業では時間が掛かりすぎてしまいますので…。なにかよい方法はないでしょうか? 簡単な方法であれば大変助かりますが、マクロなどを使用する方法でもかまいませんのでご教授下さい。 よろしくお願い致します。

  • 重複データ削除

    DOSプロンプトでテキストファイルの重複データを削除するコマンドはあるのでしょうか? また、新、旧のデータを持つファイルがあり新データを旧データに上書きする時に重複データは上書きしないコマンドはあるのでしょうか? 今はtype a.txt>>b.txtで実行して重複データを手作業よって削除してます。 どなたかご教授願います。

  • エクセルで重複データを整理する方法

    単純なデータなのですが、重複している行が結構あります。同じデータは1行だけを残し、あとは削除して整理したいのですが、適切な方法が分かりません。 3000行にも上るデータなので、一つずつチェックするのも難しいですし、間違ってしまいそうです。 例えば下記のようなデータです。 取引先 売上件数 売上高(万円) A社   20   300 B社   15   250 C社   10   180 A社   20   300      ・      ・      ・ 上記の例で言うと、A社が重複しているため、ひとつだけを残し、あとは削除して整理したいのです。何か良い方法はありませんでしょうか? よろしくお願いいたします。

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • 重複 があれば削除して1つに

    http://oshiete1.goo.ne.jp/qa4510771.html の族編です。 エクセルの1列の縦長いデータを抽出して 1行の横長いカンマ区切りのテキストにしたいのですが、 エクセルの縦1列をコピペでワードにテキストで貼り付け そこから改行を置き換え削除で横並び1列になったのですが 重複する文字が複数あったので、重複分を削除して1つだけに残したいのです。 エクセルデータは変更してはいけないので、コピーしかできません。別のエクセルにならコピーしてもかまいません。 手作業では大変な作業ですので、簡単で単純な方法を教えて下さい。 ********************************** aaa  ← エクセルの縦列のデータ bbb  ← ccc aaa ddd bbb ↓ aaa,bbb,ccc,ddd こんな風に重複分だけ削除して1行カンマテキストにしたいのです。 <(_ _)>