• 締切済み

C#でエクセルみたいな重複行削除

よくエクセルファイルである「重複行を削除」という 処理を行いたいのですが、検討もつきません。 想像ではStreamReaderを使用して、ファイルを読み出して 処理を行う、というのはわかってるのですが、 単一ファイル内の重複行を探し出して削除する、という処理が浮かびません・・・。 最初、ReadToEnd()で一気に読み出し、 新たにStreamReaderを作成して、ReadLine()で一行ずつ取り出して マッチしたらremoveする、と考えていたのですが、 そもそも一気に取り出したものにマッチするわけがなく、削除はできませんでした・・・。 何か良案がありましたら、教えてくださるとうれしいです。 どなたかご教授いただけると幸いです。

みんなの回答

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2
参考URL:
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31262&forum=7
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

入力バッファを一行分用意して、 ファイルから読み出した一行が、入力バッファと違っていたら、入力バッファに代入するとともに出力ファイルに出力します。 入力バッファと同じだったら単に読み捨てます。 入力ファイルが読み終わったら、 入力ファイルを削除して、 出力ファイルを入力ファイル名に名前を変更します。

関連するQ&A

  • 重複行を削除するエクセルのマクロ

    重複している行を削除したいです。     A    B    C    D 1   a123   4567   PX2   0 2   a456   4567  PX3  5000 3   a789  4567   PX5   10 4   a567   4567   PX4   20 5   a123   4567   PX2   0 A行とC行を検索し両方が重複していたら重複している一行を削除するボタンを作りたいと思っております。どうぞご教授ください。

  • C#で空白行を削除する方法

    C#でテキストを読み込んで、文字列型の変数に代入、そしてtextBoxに表示させます。その中にいくつかの空白だけの行があります。その空白行だけを削除する方法がわかりません。わかる方がいらっしゃいましたらよろしくお願いします。 FileStream file = File.Open(@"C:\text.txt",FileMode.Open); Encoding enc = Encoding.GetEncoding("Shift_JIS"); StreamReader reader = new StreamReader(file,enc); string A = reader.ReadToEnd(); A = Regex.Replace(A,"\r\n",""); textBox1.Text = A; とすると全ての改行が削除されてしまいます。 正規表現をうまくつかうと出来るような気がするんですが・・・

  • エクセルで行の削除

    セルA3からセルR5000までデータが入っています。 データー量を減らすため4行目、6行目と一行おきに削除したいのですが、一気に削除する方法はありませんか。 宜しくお願いします。

  • ExcelVBA 行毎の重複検索と削除

    ExcelVBA 行毎の重複検索と削除 画像を確認いただきたいのですが、 赤くなっているところが、一行毎の重複セルとなりますが、 これを自動的に検索して削除し、左詰めを行う、 というVBAコードを知りたいです なにぶん初心者なもので、できれば一つ一つの動きが分かるような コメント付きで頂けるとありがたいです。 お手数ですが皆様よろしくお願いします。  

  • テキストファイルの行を指定して読み込み

    テキストファイルの読み込みたい行を指定して テキストボックスに表示させたいのですが、 どのようにすればよいでしょうか? StreamReaderには一行分の文字を読み取るReadLine メソッドがありますが、行は指定はできないようです。 良い方法があればアドバイスを頂きたいです。 よろしくお願いします。 --- 開発環境:VS2005 pro OS:Vista

  • 行単位で並び替えて、重複行を削除したい

    WindowsXPです。 テキストファイル、A.TXTがあり、10000行くらいなのですが、 行単位で並べ替えて、重複している同じものがあれば、これを1行にまとめたいのです。 並べ替えだけならば、MSDOSで、 sort A.TXT > outfile.TXT でいけそうですが、重複行をまとめることは出来そうにありません。 バッチファイルで処理をしたいのでMSDOSで捜しているのですが方法はないのでしょうか。 MSDOSに限らないとすれば、何か簡単にできる方法はありますか。 何かスクリプトみたいな感じで出来るといろいろと応用が出来ていいのですが。 関連して、WindowsXPでも、PERLが使えると聞きました。 WEBで捜しましたが、どうもどれがいいのか、また、インストール方法もよくわかりません。 フリーで使える、Windows上のPERL、あるいは、MSDOS以上に使い勝手のよいスクリプトがあれば、教えてください。

  • テキストファイルの重複削除をする!

    質問お願いします! テキストファイル内の、重複削除をしたいのですが、膨大の量なので、 その量に対応するソフトなどありますか? 条件 (1)一度に500万行程度の処理能力(多ければ多い程) (2)処理に掛かる時間が短い(ここが一番) (3)違うテキストファイルの物とも、重複作業が出来る(ファイル間での重複処理機能) この様な物を探しています! いろいろソフトを探したのですが、私が探した物は、数万行程度でいっぱいです・・・ 宜しくお願いします。

  • csvファイルの1カラム目に重複行があればその行全体を削除するには?

    次のようなファイルがあった場合、 1, 2, 3 1, 3, 5 2, 4, 7 3, 1, 0 3, 1, 2 3, 7, 1 4, 0, 0 5, 0, 0 1カラム目が重複する行を検索して、該当する行全体を削除し、(最初に見つかった行はそのままで、それ以降の重複行は削除したい)次のようなファイルにする場合は、どのようなコマンド、スクリプト作成すればよいでしょうか? 1, 2, 3 2, 4, 7 3, 1, 0 4, 0, 0 5, 0, 0

  • テキストファイルの重複行を削除できますか?

    テキストファイルを読み込んだ際に重複行を削除する 事とかって出来ますでしょうか?? そういう削除関数みたいなのがないんですよね。。。。 C言語って.......

  • C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング

    C言語で書き込んだファイルの重複行の削除と行の並び変えるプログラミング ファイル名が 0.txt というC言語で書き込んだテキストファイルがあり その中身は以下のようなものとします。 111 000 222 555 000 444 222 000 これらを行ごとに見て重複行を削除し 更に値の小さな順に並び変えたい、つまりファイル内を 000 111 222 444 555 となるようなプログラミングを考えているのですが 調べても分からず悩んでいます。 c言語のプログラム内に UNIXコマンドを扱う方法を考えているのですが c言語内でUNIXコマンドを併用するためのsystem()関数 や 重複行を削除する uniq というUNIXコマンドを どのようにプログラム内に挿入すればいいのでしょうか? ご回答、よろしくお願いいたします。 ちなみに以下のプログラムは system関数が理解できない私の作成失敗したものです。 #include <stdio.h> #include <stdlib.h> int main(void) { system("uniq 0.txt"); }

専門家に質問してみよう