C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[35]: ReadLineで読み込んだ文字列の検索


(過去ログ 66 を表示中)

[トピック内 94 記事 (1 - 20 表示)]  << 0 | 1 | 2 | 3 | 4 >>

■37991 / inTopicNo.1)  ReadLineで読み込んだ文字列の検索
  
□投稿者/ Axolotl (21回)-(2009/07/05(Sun) 18:46:14)
Axolotl さんの Web サイト

分類:[C#] 

2009/07/05(Sun) 18:49:58 編集(投稿者)

こんにちは。
最近頻繁に質問させていただいていますが、今回はとても複雑で分解してみたものの歯が立たず;;;
どうかみなさんのお知恵を借りたいと思っています。

あるテキストファイル A.txt があります。
そのファイルは内容が箇条書きにされていて、

A=ABCDE
B=あいうえお

となっています。このABが一セットでこのような組がいくつもあります(同じ組は存在しないと思ってください)。
また、ある文字列Cがあります。
で、このテキストファイルはReadLineで一行ずつ読み込むことが出来ますよね。そこで、読み込んだ文字列から次の事を実行したいのです。
・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
・上記が成立するならばBを返す(二つ以上あるならば同じ文字の多い方を返す)。

同じ単語があるかどうかを探すにはContainsを使いますが、二つの文字列の中から同じ文字を探すというのはできるのでしょうか?

丸投げしているように思えますが、本当にいろいろ調べても分かりませんでした…。
言葉足らずですみません。なんとかお願いします!

引用返信 編集キー/
■37992 / inTopicNo.2)  Re[1]: ReadLineで読み込んだ文字列の検索
□投稿者/ ぱぱいやん (50回)-(2009/07/05(Sun) 19:17:23)
ぱぱいやん さんの Web サイト
No37991 (Axolotl さん) に返信
> 2009/07/05(Sun) 18:49:58 編集(投稿者)
>
> こんにちは。
> 最近頻繁に質問させていただいていますが、今回はとても複雑で分解してみたものの歯が立たず;;;
> どうかみなさんのお知恵を借りたいと思っています。
>
> あるテキストファイル A.txt があります。
> そのファイルは内容が箇条書きにされていて、
>
> A=ABCDE
> B=あいうえお
>
> となっています。このABが一セットでこのような組がいくつもあります(同じ組は存在しないと思ってください)。
> また、ある文字列Cがあります。
> で、このテキストファイルはReadLineで一行ずつ読み込むことが出来ますよね。そこで、読み込んだ文字列から次の事を実行したいのです。
> ・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
> ・上記が成立するならばBを返す(二つ以上あるならば同じ文字の多い方を返す)。
>
> 同じ単語があるかどうかを探すにはContainsを使いますが、二つの文字列の中から同じ文字を探すというのはできるのでしょうか?
>
> 丸投げしているように思えますが、本当にいろいろ調べても分かりませんでした…。
> 言葉足らずですみません。なんとかお願いします!
>

ABC が1セットになっているなら、ReadLine で取得したレコード情報を捨てずに変数に取っておけば良いのではないでしょうか?
文字列 C に A の文字列が 3 つ以上入っていることを確認するための方法は、文字列変数のメソッド IndexOf を使用すれば良いと思います。
引用返信 編集キー/
■37995 / inTopicNo.3)  Re[1]: ReadLineで読み込んだ文字列の検索
□投稿者/ らじうむ (12回)-(2009/07/05(Sun) 19:54:27)
2009/07/05(Sun) 19:56:07 編集(投稿者)
No37991 (Axolotl さん) に返信
> 2009/07/05(Sun) 18:49:58 編集(投稿者)
>
> こんにちは。
> 最近頻繁に質問させていただいていますが、今回はとても複雑で分解してみたものの歯が立たず;;;
> どうかみなさんのお知恵を借りたいと思っています。
>
> あるテキストファイル A.txt があります。
> そのファイルは内容が箇条書きにされていて、
>
> A=ABCDE
> B=あいうえお
>
> となっています。このABが一セットでこのような組がいくつもあります(同じ組は存在しないと思ってください)。
> また、ある文字列Cがあります。
> で、このテキストファイルはReadLineで一行ずつ読み込むことが出来ますよね。そこで、読み込んだ文字列から次の事を実行したいのです。
> ・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
> ・上記が成立するならばBを返す(二つ以上あるならば同じ文字の多い方を返す)。
>
> 同じ単語があるかどうかを探すにはContainsを使いますが、二つの文字列の中から同じ文字を探すというのはできるのでしょうか?
>
> 丸投げしているように思えますが、本当にいろいろ調べても分かりませんでした…。
> 言葉足らずですみません。なんとかお願いします!

んーと、Regex使って検索するのが楽かな?
(やりたいことって結局のところ単語検索ってことですよね?)
まあ、Regexだと処理速度は遅くなりますし、これくらいの検索ならIndexOfで回してカウントするとかの方が良いかもですね。

引用返信 編集キー/
■37998 / inTopicNo.4)  Re[2]: ReadLineで読み込んだ文字列の検索
□投稿者/ Axolotl (22回)-(2009/07/05(Sun) 21:00:41)
Axolotl さんの Web サイト
ありがとうございます。

IndexOfを使うというのは結構良いと思います。

ただ、文字列Aに含まれている単語と文字列Cに含まれている単語の中のどれが一致しているのか、また3文字以上というのは・・・。

多分もっとIndexOfを使おうと思えば出来るのかもしれませんが、わかりません。。。

申し訳ないですが、出来たら具体的にお願いします。
引用返信 編集キー/
■38002 / inTopicNo.5)  Re[3]: ReadLineで読み込んだ文字列の検索
□投稿者/ やじゅ (1076回)-(2009/07/05(Sun) 22:07:49)
やじゅ さんの Web サイト
2009/07/06(Mon) 12:32:56 編集(投稿者)

No37998 (Axolotl さん) に返信
> IndexOfを使うというのは結構良いと思います。
>
> ただ、文字列Aに含まれている単語と文字列Cに含まれている単語の中のどれが一致しているのか、また3文字以上というのは・・・。
>
> 多分もっとIndexOfを使おうと思えば出来るのかもしれませんが、わかりません。。。
>

処理をいっぺんにやろうと考えると出来ませんので
処理を分解していくしかありません。

3文字以上なら、初めに3文字でIndexOfで検索
一致位置が分かれば、そこから何文字まで一致しているか調べる

----------------------------------------------------------

3文字じゃなくて、3語なのね・・・
引用返信 編集キー/
■38004 / inTopicNo.6)  Re[3]: ReadLineで読み込んだ文字列の検索
□投稿者/ らじうむ (13回)-(2009/07/05(Sun) 22:18:59)
2009/07/05(Sun) 22:27:08 編集(投稿者)

No37998 (Axolotl さん) に返信
> ありがとうございます。
>
> IndexOfを使うというのは結構良いと思います。
>
> ただ、文字列Aに含まれている単語と文字列Cに含まれている単語の中のどれが一致しているのか、また3文字以上というのは・・・。
>
> 多分もっとIndexOfを使おうと思えば出来るのかもしれませんが、わかりません。。。
>
> 申し訳ないですが、出来たら具体的にお願いします。

適当だけどこんな感じかなあ

List<int> resultList = new List<int>();
int pos = 0;
while(true)
{
if(文字列C.Length <= pos) break;
pos = 文字列C.IndexOf(文字列A, pos);
if(pos < 0) break;
resultList.Add(pos);
// 重なる部分は除外するのかな?
pos += 文字列A.Length;
}

…ん?3文字以上ってなにか特別な条件あったっけ?

# すみません。条件見逃してました…これじゃだめやん
引用返信 編集キー/
■38016 / inTopicNo.7)  Re[1]: ReadLineで読み込んだ文字列の検索
□投稿者/ .SHO (919回)-(2009/07/06(Mon) 09:15:58)
> A=ABCDE
> B=あいうえお
>
> となっています。このABが一セットでこのような組がいくつもあります(同じ組は存在しないと思ってください)。
> また、ある文字列Cがあります。
> で、このテキストファイルはReadLineで一行ずつ読み込むことが出来ますよね。そこで、読み込んだ文字列から次の事を実行したいのです。
> ・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
> ・上記が成立するならばBを返す(二つ以上あるならば同じ文字の多い方を返す)。
>
> 同じ単語があるかどうかを探すにはContainsを使いますが、二つの文字列の中から同じ文字を探すというのはできるのでしょうか?

この条件だったら探す対象は「A」だけで、二つの文字列から探す必要はないのでは?
引用返信 編集キー/
■38019 / inTopicNo.8)  Re[1]: ReadLineで読み込んだ文字列の検索
□投稿者/ επιστημη (2018回)-(2009/07/06(Mon) 10:00:45)
επιστημη さんの Web サイト
> A=ABCDE
> B=あいうえお
>...
> ・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
> ・上記が成立するならばBを返す(二つ以上あるならば同じ文字の多い方を返す)。

文字列Aから3文字以上の語を作ると:
ABC
BCD
CDE
ABCD
BCDE
ABCDE
となりますが、これら部分文字列それぞれについて
Cにあるかを検索すればいいのかしら?

引用返信 編集キー/
■38021 / inTopicNo.9)  Re[2]: ReadLineで読み込んだ文字列の検索
□投稿者/ みきぬ (507回)-(2009/07/06(Mon) 10:08:35)
2009/07/06(Mon) 12:24:08 編集(投稿者)

> ・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。

文字列 "eac" に対して、"A=abcde" はヒットする? しない?


------------------------
↓あー、なるほど。そっちの意味か。
引用返信 編集キー/
■38035 / inTopicNo.10)  Re[3]: ReadLineで読み込んだ文字列の検索
□投稿者/ Jitta on the way (346回)-(2009/07/06(Mon) 12:09:02)
No38021 (みきぬ さん) に返信
>>・全ての組のAの中にある文字列からCに含まれる文字列と同じ文字(3語以上)があるか探す。
>
> 文字列 "eac" に対して、"A=abcde" はヒットする? しない?

単語って書いてあるから、
"good yesterday found"
は、
"i found a good sentence, yesterday."
に、ヒットする?しない?

じゃないかと。
引用返信 編集キー/
■38042 / inTopicNo.11)  Re[4]: ReadLineで読み込んだ文字列の検索
□投稿者/ Axolotl (23回)-(2009/07/06(Mon) 14:49:17)
Axolotl さんの Web サイト
みなさんありがとうございます。

ええと、とりあえず例を挙げますと
-----------------------------------------------------
|A = "そしてそのとき奴は言った・・・「Yes we can't」" |
|B = "まて!最後にちょこっとついた「't」はなんだ!" |
|C = "奴は言いましたね、はぁ。" |
-----------------------------------------------------
この場合、Aに含まれる「奴は言」がCに含まれるものと同じなので、Bを返す、となります。そして3「文字」以上含まれるのであれば、にしたいです。

また「奴はsaid(言った)」と「奴は言った」であれば、どちらも「奴」「は」「言」は入っていますが、続いていないのでBは返さないようにしたいのですが・・・

分解して考えてそれをつなげるようにしないと頭がパンクしてしまうので、そうしてください;;;

また、この例文のような形だと3文字以上の語句を全て探し当てるというのは相当時間がかかると思うので、他の方法のほうがなるべくならよいのですが・・・。

本当に身の程知らずな事を質問させていただいてすみません!よろしくお願いします。

引用返信 編集キー/
■38043 / inTopicNo.12)  Re[5]: ReadLineで読み込んだ文字列の検索
□投稿者/ .SHO (924回)-(2009/07/06(Mon) 15:04:13)
> ええと、とりあえず例を挙げますと
> -----------------------------------------------------
> |A = "そしてそのとき奴は言った・・・「Yes we can't」" |
> |B = "まて!最後にちょこっとついた「't」はなんだ!" |
> |C = "奴は言いましたね、はぁ。" |
> -----------------------------------------------------
> この場合、Aに含まれる「奴は言」がCに含まれるものと同じなので、Bを返す、となります。そして3「文字」以上含まれるのであれば、にしたいです。

ぜんぜん何言ってるのかわからんです!

C = "奴は言いましたね、はぁ。"

A = "そしてそのとき奴は言った・・・「Yes we can't」"
B = "まて!最後にちょこっとついた「't」はなんだ!"
A = ・・・
B = ・・・
A = ・・・
B = ・・・
A = ・・・
B = ・・・
  ・
  ・
  ・

ですか?
引用返信 編集キー/
■38045 / inTopicNo.13)  Re[5]: ReadLineで読み込んだ文字列の検索
□投稿者/ ぱぱいやん (51回)-(2009/07/06(Mon) 15:15:06)
ぱぱいやん さんの Web サイト
No38042 (Axolotl さん) に返信
> みなさんありがとうございます。
>
> ええと、とりあえず例を挙げますと
> -----------------------------------------------------
> |A = "そしてそのとき奴は言った・・・「Yes we can't」" |
> |B = "まて!最後にちょこっとついた「't」はなんだ!" |
> |C = "奴は言いましたね、はぁ。" |
> -----------------------------------------------------
> この場合、Aに含まれる「奴は言」がCに含まれるものと同じなので、Bを返す、となります。そして3「文字」以上含まれるのであれば、にしたいです。

それなら、再帰処理で全文字列の検索のキーワードを切り出せればOKです。

まず、A の文字列を単純化して、検索対象となるキーワードを自分で書き出してみます。
次に、そこから規則を見つけます。
それをロジックに起こします。

一番楽しいところですよ。
人に考えさせてはもったいないです。
引用返信 編集キー/
■38046 / inTopicNo.14)  Re[6]: ReadLineで読み込んだ文字列の検索
□投稿者/ επιστημη (2019回)-(2009/07/06(Mon) 15:16:20)
επιστημη さんの Web サイト
> それなら、再帰処理で全文字列の検索のキーワードを切り出せればOKです。

再帰?

引用返信 編集キー/
■38048 / inTopicNo.15)  Re[7]: ReadLineで読み込んだ文字列の検索
□投稿者/ みきぬ (513回)-(2009/07/06(Mon) 15:37:27)
2つの文字列を1文字ずつずらしながら、重なり合う部分を取り出して、それを1文字ずつ比較していくといいのかなあ。
…と言葉にしても自分でもよくわからないので、コードに書いてみた。

        public int GetSameStringLength(string a, string c)
        {
            int result = 0;

            for (int j = (1 - c.Length); j <= (a.Length - 1); j++)
            {
                int count = 0;

                for (int i = Math.Max(0, j + 1); i <= Math.Min((c.Length - 1) + j, a.Length - 1); i++)
                {
                    if (a[i] == c[i - j])
                    {
                        System.Diagnostics.Debug.Write(a[i]);
                        count++;
                        result = Math.Max(result, count);
                    }
                    else
                    {
                        System.Diagnostics.Debug.WriteLineIf(count > 0, "");
                        count = 0;
                    }
                }
            }

           return result;
        }

引用返信 編集キー/
■38050 / inTopicNo.16)  Re[7]: ReadLineで読み込んだ文字列の検索
□投稿者/ ぱぱいやん (52回)-(2009/07/06(Mon) 15:39:28)
ぱぱいやん さんの Web サイト
No38046 (επιστημη さん) に返信
>>それなら、再帰処理で全文字列の検索のキーワードを切り出せればOKです。
>
> 再帰?
>

再帰が速いかと
再帰が速いか
再帰が速い
再帰が速
再帰が
帰が速いかと
帰が速いか
帰が速い
帰が速
が速いかと
が速いか
が速い
速いかと
速いか
いかと

で検索するんですよね?
引用返信 編集キー/
■38052 / inTopicNo.17)  Re[8]: ReadLineで読み込んだ文字列の検索
□投稿者/ .SHO (926回)-(2009/07/06(Mon) 15:55:36)
> 再帰が速いかと
> 再帰が速いか
> 再帰が速い
> 再帰が速
> 再帰が
> 帰が速いかと
> 帰が速いか
> 帰が速い
> 帰が速
> が速いかと
> が速いか
> が速い
> 速いかと
> 速いか
> いかと

これ、遅そうじゃないですか?
引用返信 編集キー/
■38057 / inTopicNo.18)  Re[9]: ReadLineで読み込んだ文字列の検索
□投稿者/ ぱぱいやん (53回)-(2009/07/06(Mon) 16:25:05)
ぱぱいやん さんの Web サイト
2009/07/06(Mon) 16:32:56 編集(投稿者)

No38052 (.SHO さん) に返信
>>再帰が速いかと
>>再帰が速いか
>>再帰が速い
>>再帰が速
>>再帰が
>>帰が速いかと
>>帰が速いか
>>帰が速い
>>帰が速
>>が速いかと
>>が速いか
>>が速い
>>速いかと
>>速いか
>>いかと
>
> これ、遅そうじゃないですか?

処理は遅いでしょうね。
手っ取り早いというつもりで書いたのですが、早い違いでした

というか、3文字以上一致するかどうかだけ判断すれば良いだけなんですね・・・
んじゃ、再帰する必要はないっすね^^;
引用返信 編集キー/
■38058 / inTopicNo.19)  Re[10]: ReadLineで読み込んだ文字列の検索
□投稿者/ επιστημη (2021回)-(2009/07/06(Mon) 16:32:33)
επιστημη さんの Web サイト
> 手っ取り早いというつもりで書いたのですが、早い違いでした

手っ取り早いっちゅーなら二重のloopの方がよっぽど。

using System;
using System.Collections.Generic;

class Program {

  public static IEnumerable<string> SubStrings(string source, int min_len) {
    for ( int len = min_len; len <= source.Length; ++len ) {
      for ( int pos = 0; pos <= source.Length - len; ++pos ) {
        yield return source.Substring(pos,len);
      }
    }
  }

  public static void Main() {
    foreach ( string sub in SubStrings("再帰が速いかと",3) ) {
      Console.WriteLine(sub);
    }
  }
}

引用返信 編集キー/
■38082 / inTopicNo.20)  Re[8]: ReadLineで読み込んだ文字列の検索
 
□投稿者/ Axolotl (24回)-(2009/07/06(Mon) 20:13:42)
Axolotl さんの Web サイト
みなさんありがとうございます。

やはり難しいですね・・・。
επιστημηさんが提案してくれたソースはどのような操作を行うのでしょうか?
参考にさせていただきますから。

う〜〜〜ん、どうやれば3文字以上とかになるんでしょう???

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 | 2 | 3 | 4 >>

管理者用

- Child Tree -