質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

2回答

1390閲覧

1行ごとに入力されている各単語の数を数えたい

ode

総合スコア25

0グッド

0クリップ

投稿2017/05/28 14:28

閲覧ありがとうございます。

一単語が一行に入力されたtxtファイルの中の
各単語が何回出てきているかを調べたいのですが、どのようにすればよいでしょうか?

単語を指定して調べる方法もありますが、調べたいtxtファイルがとても大きなファイルなので、その方法は厳しいです。
excelやメモ帳では開けない大きさです。
emeditorでは開けました。

どうか助言をお願いいたします。

~例~
aaa.txt
あああ
いいい
ううう
いいい
あああ
えええ

というファイルがあったら、
あああ,2
いいい,2
ううう,1
えええ,1

というように数えたいです...。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_Victorique__

2017/05/28 15:34

使用言語について教えてください。また、開発環境や使っているOSなどもお願いします。
ode

2017/05/28 15:41

ご質問ありがとうございます。javaで作ろうとしていましたが、無事解決致しました。またなにかありましたらどうかよろしくお願いいたします。
guest

回答2

0

ベストアンサー

linuxマシンにそのファイルをコピーして

$ sort hoge.txt | uniq -c >result.txt

投稿2017/05/28 14:47

takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ode

2017/05/28 15:38

無事解決いたしました。ありがとうございました。 また何かあればどうかよろしくお願いいたします。
guest

0

Excel タグがついているので、Excelのマクロでの方法で回答します。

Sub WordCount() Dim strFileName As String Dim Dic As Object Dim intFree As Integer Dim strWord As String Dim i As Long, j As Long strFileName = "C:\test\aaa.txt" Set Dic = CreateObject("Scripting.Dictionary") intFree = FreeFile '空番号を取得 Open strFileName For Input As #intFree 'テキストファィルをオープン Do Until EOF(intFree) Line Input #intFree, strWord '1行読み込み If Dic.exists(strWord) Then Dic(strWord) = Dic(strWord) + 1 Else Dic.Add strWord, 1 End If Loop Close #intFree Range("A1").Resize(Dic.Count) = Application.WorksheetFunction.Transpose(Dic.keys) Range("B1").Resize(Dic.Count) = Application.WorksheetFunction.Transpose(Dic.items) End Sub

結果はアクティブシートに出力します。
テキストファイルを1行ずつ読み込んでますので、サイズの大きいファイルだと時間がかかるかもしれませんので、小さいファイルでテストしてから実行してみてください。

上記で時間がかかりすぎる場合は、ADO を使用してSQLで読み込んで処理する方法も試してみてください。
だだし、この方法はVBEの参照設定(ツール>参照設定)で「Microsoft ActiveX Data ObjectX.X Library」にチェックを入れる必要があります。

Sub WordCountADO() Dim objCn As New ADODB.Connection Dim objRS As ADODB.Recordset Dim GYO As Long, COL As Long Dim strSQL As String With objCn .Provider = "Microsoft.ACE.OLEDB.12.0" .Properties("Extended Properties") = "Text;HDR=NO" .ConnectionString = "C:\test\" .Open End With strSQL = "SELECT F1, Count(F1) FROM aaa.txt GROUP BY F1" Set objRS = New ADODB.Recordset Set objRS = objCn.Execute(strSQL) Range("A1").CopyFromRecordset objRS objCn.Close Set objRS = Nothing Set objCn = Nothing End Sub

投稿2017/05/28 16:13

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問