Сравнить C#

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Здравствуйте ребята, есть такая задача через парсинг беру жанр кино, потом надо сравнить этот жанр со всеми жанрами штоб дать ему конкретный ид

например, спарсил жанр биография, мне надо штоб жанру биография дать аиди, как мне это организовать?

пример :
  • МЕЛОДРАМА = ID 1
  • МЮЗИКЛ = ID 2
  • БОЕВИК = ID 3
  • СЕМЕЙНЫЙ = ID 4
  • ИСТОРИЧЕСКИЙ = ID 5
  • ДРАМА = ID 6
  • АРТ-ХАУС = ID 7
  • биография = ID 8
 
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Сделайте таблицу
Жанр:ID
Ищете по жанру и по совпадению берете всю строку, или только колонку с айди.
Поиск по таблицам кажется был в коде на форуме, поищите.
 

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Сделайте таблицу
Жанр:ID
Ищете по жанру и по совпадению берете всю строку, или только колонку с айди.
Поиск по таблицам кажется был в коде на форуме, поищите.
спасибо за ответ, а нельзя в С# это организовать чтобы если найдет совпадение вернет значение "ID"?

если честно я не нашел на форуме что вы мне написали :-)
 
Регистрация
12.07.2014
Сообщения
916
Благодарностей
371
Баллы
63
Регистрация
27.09.2019
Сообщения
69
Благодарностей
44
Баллы
18
спасибо за ответ, а нельзя в С# это организовать чтобы если найдет совпадение вернет значение "ID"?
Название таблицы и переменных можете изменить на свои, в сниппете снимете галочку не возвращать значение и выберите переменную с айди, если жанр не будет найден - произойдет выход по красной ветке
Попробуйте так:
IZennoTable workTable = project.Tables["yourTable"];
string genre = project.Variables["myGenre"].Value, id = string.Empty;
bool founded = false;
int rowCount = workTable.RowCount;

for (int r = 0; r < rowCount; r++)
{
    if (workTable.GetCell(0, r) == genre) // 0 - первый столбец, 1 - второй и т.д.
    {
        founded = true;
        id = workTable.GetCell(1, r);
        return id;
    }
}
if (!founded) throw new Exception ("Жанр не найден");
можно легко допилить на запись нового жанра в таблицу и присвоение ему айди
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
а нельзя в С# это организовать чтобы если найдет совпадение вернет значение "ID"?
Можно через словарь организовать, если у вас есть готовая база жанров и ID. В вашем случае, вместо genre можете подставить переменную проекта.

C#:
string genre = "БОеВиК";

Dictionary<string, string> d = new Dictionary<string, string>
{
    {"МЕлОДРАМа", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

foreach (KeyValuePair<string, string> k in d)
    if (genre.ToLower() == k.Key.ToLower()) return k.Value;
 

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Можно через словарь организовать, если у вас есть готовая база жанров и ID. В вашем случае, вместо genre можете подставить переменную проекта.

C#:
string genre = "БОеВиК";

Dictionary<string, string> d = new Dictionary<string, string>
{
    {"МЕлОДРАМа", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

foreach (KeyValuePair<string, string> k in d)
    if (genre.ToLower() == k.Key.ToLower()) return k.Value;
C#:
string genre = "project.Variables["genre"].Value";

Dictionary<string, string> d = new Dictionary<string, string>
{
    {"drama", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

foreach (KeyValuePair<string, string> k in d)
    if (genre.ToLower() == k.Key.ToLower()) return k.Value;
например так, в переменную генре значение drama но не работает
 

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
C#:
Dictionary<string, string> d = new Dictionary<string, string>
{
    {"drama", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

foreach (KeyValuePair<string, string> k in d)
    if (project.Variables["genre"].Value.ToLower() == k.Key.ToLower()) return k.Value;
 
  • Спасибо
Реакции: DarkSky

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
C#:
Dictionary<string, string> d = new Dictionary<string, string>
{
    {"drama", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

foreach (KeyValuePair<string, string> k in d)
    if (project.Variables["genre"].Value.ToLower() == k.Key.ToLower()) return k.Value;
вот так работает спасибо большое
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Лучше использовать объектную модель

C#:
public class Genre
{
    public int ID { get; set; }
    public string Name { get; set; }
}
и затем:

C#:
var genre = new[]
{
    new Genre { ID = 1, Name = "МЕЛОДРАМА " },
    new Genre { ID = 2, Name = "МЮЗИКЛ " },
    new Genre { ID = 3, Name = "БОЕВИК " },
};
и тогда вы можете использовать LINQ, чтобы получить любую необходимую вам информацию:

C#:
var genreR =
    from p in genre
     where p.Name == "МЕЛОДРАМА"
     select p;
 
Последнее редактирование:
  • Спасибо
Реакции: JurgenZolle и DarkSky

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Лучше использовать объектную модель

C#:
public class Genre
{
    public int ID { get; set; }
    public string Name { get; set; }
}
и затем:

C#:
var genre = new[]
{
    new Genre { ID = 1, Name = "МЕЛОДРАМА " },
    new Genre { ID = 2, Name = "МЮЗИКЛ " },
    new Genre { ID = 3, Name = "БОЕВИК " },
};
и тогда вы можете использовать LINQ, чтобы получить любую необходимую вам информацию:

C#:
var genreR =
    from p in genre
     where p.Name == "МЕЛОДРАМА"
     select p;
если честно этот код я не понял)) код RoyalBank работает отлично то что надо, мне там остаётся както сделать так штоб если переменная пустая выходило на красной а щас там пишет ок
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Лучше использовать объектную модель
Добавление классов для такой простой задачи избыточно. Это как начитаться умных книжек про паттерны и пихать их куда не попадя.

и тогда вы можете использовать LINQ, чтобы получить любую необходимую вам информацию:
LINQ можно из без этого использовать применительно к этой задачи.

если честно этот код я не понял))

мне там остаётся както сделать так штоб если переменная пустая выходило на красной а щас там пишет ок
C#:
Dictionary<string, string> d = new Dictionary<string, string>
{
    {"drama", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

var id = d.SingleOrDefault(k => k.Key.ToLower() == project.Variables["genre"].Value.ToLower()).Value;
if(id == null) return null;
 
  • Спасибо
Реакции: molotok и doc

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Добавление классов для такой простой задачи избыточно. Это как начитаться умных книжек про паттерны и пихать их куда не попадя.


LINQ можно из без этого использовать применительно к этой задачи.




C#:
Dictionary<string, string> d = new Dictionary<string, string>
{
    {"drama", "1"},
    {"МЮЗиКЛ", "2"},
    {"бОЕВИК", "3"},
    {"СЕМейНЫЙ", "4"}
};

var id = d.SingleOrDefault(k => k.Key.ToLower() == project.Variables["genre"].Value.ToLower()).Value;
if(id == null) return null;
Как я этот код добавляю сразу всё перестаёт работать. другие кубики тоже не работают пока не переоткрою проект

if(id == null) return null;
 

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Как я этот код добавляю сразу всё перестаёт работать. другие кубики тоже не работают пока не переоткрою проект

if(id == null) return null;
Так может стоит почитать что пишет в логе? И если не понятно написать что там?
Если ты добавляешь только это и непонятно куда
if(id == null) return null;
То какого эффекта ты ждешь?

Я же привел кусок кода, он ничем особо не отличается от кода @RoyalBank.
Его и надо втыкать полностью.
Различие в том, что идет проверка, если id == null, то выход по красной.

А далее, там уже как тебе надо ты или то что находится в переменной id присваиваешь своей
project.Variables["переменная в которой будет id жанра"].Value = id;

Или возвращаешь значение через return
return id;
 

DarkSky

Client
Регистрация
10.01.2019
Сообщения
80
Благодарностей
7
Баллы
8
Спасибо всем за помощь, я очень рад что так быстро помогли.

Вопрос решен спасибо ише раз всем !
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)