No.3ベストアンサー
- 回答日時:
★プログラムとして記述するのですか?
・ソートされたデータならば、もしくはソートできるデータならば簡単に重複行をカットまたは、抽出できます。
・でも、データ位置を保存したままで重複行をチェックするには少し工夫が必要です。
・一番簡単な重複行チェックのアルゴリズムを教えます。
●アルゴリズム(一例)
・テキストファイルを行単位でメモリへ格納します。→10,000行
・メモリへ格納した行データは、文字列のポインタ配列で管理します。
・この配列を『qsort』などでソートします。分かりますか?
・そしたら、1行目から順番に次の行データが『重複』している番号かをチェックします。
・チェックした結果、同じ番号ならばその行を『抜き出す』処理をします。
●サンプル(一例)
void main( void )
{
char *alloc;
char *line[ 20000 ]; ←テキストの最大行数(2万行)
char buff[ 1024 ]; ←1行の最大バイト数
int max = 0;
int now;
FILE *fp;
if ( (fp = fopen("filename.txt","r")) != NULL ){
while ( fgets(buff,sizeof(buff),fp) != NULL ){
if ( (alloc = malloc(strlen(buff) + 1)) == NULL ){
printf( "メモリ不足です.\n" );
break;
}
if ( max >= 20000 ){
printf( "行数が多すぎます.\n" );
break;
}
line[ max++ ] = strcpy( alloc, buff );
}
line[ max ] = NULL;
fclose( fp );
qsort( line, max, sizeof(char*), MySortComp ); ←ソート比較関数(自作しましょう)
MyDoubleExtract( line, max ); ←ここで重複行チェック(printfで出力)
for ( now = 0 ; now < max ; now++ ){
free( line[now] ); ←メモリ解放
}
}
}
最後に:
・上記のサンプルは、テキストファイルを行単位で読み込む部分のみです。
・ソート部分と、重複行チェックは質問者さんが作って下さい。→頑張ってね。
・『MySortComp』関数は、ソートするときの比較関数です。→qsort関数の使い方を参照。
・『MyDoubleExtract』関数が、重複行をチェックして出力する関数です。→上記のアルゴリズム参照。
・以上。おわり。
参考URL:http://www.bohyoh.com/CandCPP/FAQ/FAQ00047.html
こんばんわ。
返信ありがとうございます。
ソートはしていませんが、テキストファイルを1行ずつ読み込み、int型配列を用いて番号をいれ、重複箇所をチェックし、カウントするというプログラムを作りました。
Oh-Orangeさんのおっしゃるとおりの方法(ソートはできていませんが)で解決できました。
ありがとうございました。
No.4
- 回答日時:
プログラムとして書くことができなければツールも存在しないわけで、
もちろん記述は可能です。
残念ながらひとつのツールで済ませることはできませんが、#1の方の仰るとおり
複数のツールを組み合わせて実現できます。
sort/uniq/sed はUNIXであれば間違いなくあるはずですが、Windowsでも
移植されたものや同等のものがあります。
またプログラムを書くとして、それはCまたはC++で書くことが必須なのでしょうか? awkだとかPerl/Ruby/Pythonといったものを使って済ませることができます。
これもUNIXならほぼインストールされていると考えられますし、Windowsでも
移植されているものがあります(それをインストールする手間がありますが)。
1~10000の番号がどのようにテキストファイルに置かれているのかが不明なのですが、
一行にひとつの番号という前提を置いていいなら awkで
{
numbers[$1]++
}
END {
for (i in numbers) {
if (numbers[i] > 1)
print i
}
}
重複している番号を抜き出せばいいだけならこれだけです。
どれぐらい重複していたとか、番号順で並べたいというなら
もうちょっと手間がかかりますがそんなに行数は増えません。
sortf (win)(Windows95/98/Me / ユーティリティ)
http://www.vector.co.jp/soft/win95/util/se000882 …
コマンドラインツール - WindowsをUNIXっぽく
http://qwerty777.s57.xrea.com/winunix/command.htm
返信ありがとうございます。
1から10000までの番号順は1から10000まで、番号順にならんでいます。
Cでプログラムを作り解決することができました。
ありがとうございました。
No.1
- 回答日時:
どのように出力されているかとかどのような環境なのかにもよりますが, 「普通の UNIX の環境でかつ各行に 1個ずつ番号がある」と
いう状況だと sort + uniq + sed でいけますね.お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Excel(エクセル) Excelの質問です。 重複なしの部署一覧の表を作り、各部署のセル横に各部署の社員番号をすべて抜き出 3 2023/04/26 18:14
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Visual Basic(VBA) A列に重複した番号の行を条件を指定して削除 4 2023/04/11 05:47
- Visual Basic(VBA) セルに抜けた番号の代わりに空白を挿入する 4 2023/04/10 20:29
- X(旧Twitter) Twitterの電話番号の登録に関する質問です。 2 2023/04/01 08:40
- Yahoo!メール Yahooメールにログインできません 2 2022/12/12 07:46
- その他(スマホアプリ・スマホゲーム) Googleアカウントが複数になり、携帯電話番号が紐ついたものを解約してしまいました。もう1年経過し 1 2023/04/29 14:14
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
- SoftBank(ソフトバンク) プリペイド携帯の電話番号変更について 2 2022/12/05 13:20
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
C# DataGridView のヘッダーセ...
-
VB.NETでファイル名順にファイ...
-
C# DataTableの行をソートしてD...
-
Excelですべての組合せ(重複組...
-
VBA基本構文の作り方 2列の...
-
文字列をソートする方法
-
線形リストのソートについて
-
あるディレクトリ内のファイル...
-
excel VBA の条件をつけての列...
-
リスト構造のソートで悩んでま...
-
qsortについて
-
DataGridViewのソートを止めたい
-
DataGridView の sort
-
DataGridViewで選択行が変わる...
-
DataGridViewでのソート制御
-
C言語について
-
VB6でデータを昇順に並べ替える
-
listboxの並び替え
-
ファイル名「1.jpg ~10.jpg~...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
System.IO.Directory.GetFiles...
-
VB.NETでファイル名順にファイ...
-
C# DataGridView のヘッダーセ...
-
あるディレクトリ内のファイル...
-
C言語・要素除去
-
ファイル名「1.jpg ~10.jpg~...
-
Excelですべての組合せ(重複組...
-
C言語でアナグラムを求めるプロ...
-
2次元配列を複数項目でソートし...
-
C# DataTableの行をソートしてD...
-
DataGridViewソート時に先頭行...
-
n番目に大きい数を求めるアル...
-
DataGridViewの複数列を連動し...
-
VBA基本構文の作り方 2列の...
-
配列の問題
-
10個の整数を入力して小さい順...
-
構造体配列の並べ替え
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
DataGridViewの昇順降順。
おすすめ情報