Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Поиск byte[] в файле


Автор: kozhura 23.6.2010, 23:43
Добрый вечер, мужики smile, есть такой код у меня:
Код

FileStream d = File.Create("sbj.txt");
        void sf_CheckedChanged(object sender, EventArgs e)
        {
            CheckBox ch = sender as CheckBox;
            if (sender is CheckBox)
            {
                
                    if (ch.Checked)
                    {
                        Encoding t = Encoding.Default;
                        byte[] data = t.GetBytes(ch.Text);
                        d.Write(data, 0, data.Length);
                        d.WriteByte(0x0D);
                        d.WriteByte(0x0A);
                        
                    }

                    else
                    {
                            Encoding g = Encoding.Default;
                            byte[] data 2 = g.GetBytes(ch.Text)

                           //????????????

                    }
                  
             }
        }


Собственно вопрос, как мне в файле sbj.txt найти совпадения с data2?? Спасибо заранее за ответ

Автор: jonie 24.6.2010, 00:41
http://www-igm.univ-mlv.fr/~lecroq/string/node7.html#SECTION0070
вот алгоритм.
либо вот
http://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_string_search_algorithm

либо еще поискать...
можно, конечно, тупо
Код


for (int i=0; i<array.Length-need.length; i++)
{
if (array[i]==need[0] && array[i+1]==need[1] && ....) //тут можно подцикл сделать
{
нашли!
}
}

Автор: kozhura 25.6.2010, 22:47
Чего-то эффекта ноль :(

Код

FileStream d = File.Create("sbj.txt");
Encoding h = Encoding.Default;
                        byte[] sub = h.GetBytes(ch.Text);
                        byte[] s = new byte[d.Length];
                        d.Read(s, 0, s.Length);
                        for (int i = 0; i < s.Length - sub.Length; i++)
                        {
                            if (s[i] == sub[0])
                            {
                                MessageBox.Show("11");
                            }
                        }


11 не выводит

Автор: Abyx 27.6.2010, 22:44
ап
а без велосипедов как?

Автор: VirusUZ 28.6.2010, 15:18
// in C#
Stream s = new FileStream("C:\\a.txt", FileMode.OpenOrCreate);
            int i=0;
            byte[] b ={ 49, 50, 51 };
            int m=0;
           
            while ((i = s.ReadByte()) > 0)
            {
                if (i == b[m])
                    m++;
                else
                    m = 0;
                if (m == b.Length)
                MessageBox.Show("OK");
            }

Автор: Abyx 28.6.2010, 16:22
VirusUZ, ваш код будет пропускать искомую последовательность

Автор: Fortnox 28.6.2010, 18:09
Возвращает позицию начала совпадения, либо -1:
Код

private static int FindPosition(byte[] data, byte[] bytesTorSearch)
        {
            int pos = 0;

            for (int i = 0; i <= data.Length - 1; ++i)
            {
                if (data[i] == bytesTorSearch[0])
                {
                    for (int j = 0; j <= bytesTorSearch.Length - 1; ++j)
                    {
                        if (data[i + j] != bytesTorSearch[j])
                        {
                            pos = 0;
                            break;
                        }
                        pos = i;
                    }

                    if (pos != 0)
                        return pos;
                }
            }
            return -1;
        }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)