Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск byte[] в файле 
:(
    Опции темы
kozhura
Дата 23.6.2010, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Добрый вечер, мужики 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?? Спасибо заранее за ответ
PM MAIL   Вверх
jonie
Дата 24.6.2010, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



http://www-igm.univ-mlv.fr/~lecroq/string/...tml#SECTION0070
вот алгоритм.
либо вот
http://en.wikipedia.org/wiki/Rabin%E2%80%9...earch_algorithm

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


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



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
kozhura
Дата 25.6.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 14.3.2009

Репутация: нет
Всего: нет



Чего-то эффекта ноль :(

Код

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 не выводит
PM MAIL   Вверх
Abyx
Дата 27.6.2010, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 0
Всего: 10



ап
а без велосипедов как?
PM MAIL   Вверх
VirusUZ
  Дата 28.6.2010, 15:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 161
Регистрация: 9.4.2010
Где: Узбекистан, Навои й обл.

Репутация: нет
Всего: -2



// 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");
            }
--------------------
Virus
PM MAIL   Вверх
Abyx
Дата 28.6.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 0
Всего: 10



VirusUZ, ваш код будет пропускать искомую последовательность
PM MAIL   Вверх
Fortnox
Дата 28.6.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 2
Всего: 22



Возвращает позицию начала совпадения, либо -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;
        }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.3275 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.