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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [VC#] Извлечение 9 элемента строки. Необходимо извлекать 9 параметр строки. 
:(
    Опции темы
MuForum
Дата 14.10.2007, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



Доброе время суток!

Задача: Есть строка вида:
Код

"43 3 30 10 10 240 240 -1 3"
эта строка также может выглядеть вот так:
"43 3 30 10 10 240 240 -1 3//comment"
"43 3 30 10 10 240 240 -1 3 //comment"
"  43   3  30  10  10 240 240  -1   3//comment"


- Необходимо извлекать 9 элемент строки, то есть в данном случае это "3".

- Я как не мучался, у меня пока не выходит. Думал сделать вот таким образом, но тоже не выходит:
Код

                    for (int i1 = (i + 1); i1 < richTextBox2.Lines.Length; i1++)
                    {
                        String T1 = richTextBox2.Lines[i1];
                        if (T1 != "end" && T1.Length > 0)
                        {
                            String TL = "";
                            int j = 0;
                            for(int il=1; il <= T1.Length; il++)
                            {
                                if (T1[il] != ' ')
                                {
                                    TL = TL + T1[il];
                                }
                                else if (T1[il] != ' ' && j==8)
                                {

                                }
                                else
                                {
                                    j++;
                                    TL="";
                                } 
                            }
                        }
                    }


- Этот метод глупый, да и не работает, так как если в начале несколько пробелов, то переменная "j" увеличивается, следовательно будет не верное решение =(

P.S. -> По идеи, строку надо разделять как-то, я так делал в C++ во время работы с IP-адресами, но у меня не получается это реализовать на VC# =(




#Добавлено:
-------------------

Вот так была реализована у меня проверка правильности IP-адреса на C++. (Благодарю за помощь dumb)

Код

 TStringList *sl = new TStringList();
 TStringList *ip = new TStringList();
 ip->Sorted = true;
 sl->Sorted = true;
 sl->Duplicates = dupIgnore;
 sl->LoadFromFile(FileDir+"Data\\"+FilterFileName);
 for (int i = 0; i < sl->Count; ++i)
 {
  int ip1, ip2, ip3, ip4;
  AnsiString s = sl->Strings[i].Trim();
  if(s.Pos(" ")) continue;
  if(sscanf(s.c_str(), "%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4)==4)
  {
   // проверка правильности ip-адреса.
   if(ip1 > 0 && ip1 < 224 && ip2 > -1 && ip2 < 256&& ip3 > -1 && ip3 < 256 && ip4 > -1 && ip4 < 256)
   {
    s.printf("%d.%d.%d.%d", ip1, ip2, ip3, ip4);
    ip->Add(s);
   }
  }
 }
 ListBox1->Clear();
 ListBox1->Items->AddStrings(ip);
 delete ip;
 delete sl;


Это сообщение отредактировал(а) MuForum - 14.10.2007, 22:08


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
mihryak
Дата 14.10.2007, 19:03 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



String.Split поможет
PM MAIL ICQ   Вверх
MuForum
Дата 14.10.2007, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



#2, mihryak - Благодарю за помощь, у меня пока в консоли вышло вот такое:

Код

using System;
using System.Collections.Generic;
using System.Text;

namespace Split
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] K = new string[50];
            int j = 0;
            string delimStr = " /";
            char[] delimiter = delimStr.ToCharArray();
            string words = " 26   3  30 128   0 251 128  -1  25 // Dragon";
            string[] split = null;

            Console.WriteLine("The delimiters are '{0}'", delimStr);
            int x = words.Length;
            split = words.Split(delimiter, x);
            Console.WriteLine("\ncount = {0} ..............", x);
            foreach (string s in split)
            {
                if (s.Length > 0)
                {
                    K[j] = s;
                    Console.WriteLine("'{0}'", K[j]);
                    j++;
                }
            }
            Console.WriteLine("K[8] = '{0}'", K[8]);
            Console.ReadKey();
        }
    }
}


Это сообщение отредактировал(а) MuForum - 14.10.2007, 21:33


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
MuForum
Дата 14.10.2007, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



#2, mihryak - Сделал, но почему-то работает не всегда, почему, понять не могу =(

P.S. -> При обработке ниже изложенного текста выдаёт только 10:
Код

1
26    3    30    128    0    251    128    -1    10 // Goblin => Noria
27    3    30    128    0    251    128    -1    10 // Chain Scorpion => Noria
28    3    30    0    0    128    128    -1    10 // Beetle Monster => Noria
29    3    30    0    0    128    128    -1    10 // Hunter => Noria
26  3    5 143 110 156 119  -1  10 // Spider noria
30    3    30    0    128    251    245    -1    10 // Forest Monster => Noria
31    3    30    0    128    251    245    -1    15 // Agon => Noria
32    3    30    128    128    251    245    -1    15 // Stone Golem => Noria
33    3    30    0    128    128    245    -1    15 // Elite Goblin => Noria
end



Вот код самих действий:
Код

                else if (T == "1")
                {
                    for (int i1 = (i + 1); i1 < richTextBox2.Lines.Length; i1++)
                    {
                        String T1 = richTextBox2.Lines[i1];
                        if (T1 != "end" && T1.Length > 0)
                        {
                            string[] K = new string[250];
                            int j = 0;
                            string delimStr = " /=<>+:;'.!@#$%^&*()";
                            char[] delimiter = delimStr.ToCharArray();
                            string words = T1;
                            string[] split = null;
                            int x = words.Length;
                            split = words.Split(delimiter, x);
                            foreach (string s in split)
                            {
                                if (s.Length > 0)
                                {
                                    K[j] = s;
                                    richTextBox1.AppendText(string.Format("K[{0}] = | s = {1}", Convert.ToInt32(j), s) + Environment.NewLine);
                                    j++;
                                }
                            }
                            k1 = k1 + Convert.ToInt32(K[8]);
                            richTextBox1.AppendText(string.Format("K[8] = {0}", K[8]) + Environment.NewLine);
                        }
                        else if (T1 == "end") break;
                    }
                }



А вот лог программы:
Код

Initialization program is in a progress...
Initialization program is completed.
Checking count units is in progress. Please wait..
K[0] = | s = 26    3    30    128    0    251    128    -1    10
K[1] = | s = Goblin
K[2] = | s = Noria
K[8] = 
K[0] = | s = 27    3    30    128    0    251    128    -1    10
K[1] = | s = Chain
K[2] = | s = Scorpion
K[3] = | s = Noria
K[8] = 
K[0] = | s = 28    3    30    0    0    128    128    -1    10
K[1] = | s = Beetle
K[2] = | s = Monster
K[3] = | s = Noria
K[8] = 
K[0] = | s = 29    3    30    0    0    128    128    -1    10
K[1] = | s = Hunter
K[2] = | s = Noria
K[8] = 
K[0] = | s = 26
K[1] = | s = 3
K[2] = | s = 5
K[3] = | s = 143
K[4] = | s = 110
K[5] = | s = 156
K[6] = | s = 119
K[7] = | s = -1
K[8] = | s = 10
K[9] = | s = Spider
K[10] = | s = noria
K[8] = 10
K[0] = | s = 30    3    30    0    128    251    245    -1    10
K[1] = | s = Forest
K[2] = | s = Monster
K[3] = | s = Noria
K[8] = 
K[0] = | s = 31    3    30    0    128    251    245    -1    15
K[1] = | s = Agon
K[2] = | s = Noria
K[8] = 
K[0] = | s = 32    3    30    128    128    251    245    -1    15
K[1] = | s = Stone
K[2] = | s = Golem
K[3] = | s = Noria
K[8] = 
K[0] = | s = 33    3    30    0    128    128    245    -1    15
K[1] = | s = Elite
K[2] = | s = Goblin
K[3] = | s = Noria
K[8] = 
Amount 0 units : 46
Amount 1 units : 10
Amount 2 units : 97
Amount 3 units : 0
Amount 4 units : 693
Total units : 846



# Добавлено: Проблему нашел, она заключается в том, что если делать разделения через пробелы, всё считается нормально, а если делать через специальную программу, то пробелов тоже визуально 3, но это считается один символ!

Вопрос: Как отслеживать этот символ, которые разделяет элементы между собой?

Это сообщение отредактировал(а) MuForum - 14.10.2007, 22:12


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
archeg
Дата 14.10.2007, 22:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(MuForum @  14.10.2007,  22:04 Найти цитируемый пост)
Вопрос: Как отслеживать этот символ, которые разделяет элементы между собой?

Код

"\t"



--------------------
ИМХО задница есть универсальный интерфейс. Ибо через задницу можно сделать абсолютно ВСЕ (bash.org.ru)

Дядька всегда можно спросить в аське, если не задалбывать - не откажет smile
И вообще, на самом деле я студент, и ненавижу обращение на "Вы") Тут все свои  ;)
PM MAIL ICQ Jabber   Вверх
MuForum
  Дата 14.10.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 427
Регистрация: 13.6.2007
Где: Молдова, Кишинев

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



#5, archeg - Благодарю за помощь, задача решена!


P.S. -> Всем кто принимал участие в решение выше изложенной проблеме благодарность!


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
PM MAIL WWW ICQ Skype MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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