Вопрос по Split в c#

irving zisman

Client
Регистрация
18.05.2017
Сообщения
225
Благодарностей
28
Баллы
28
Подскажите, как в этом коде результат положить не в переменные проекта, а в переменные C# ?

C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = true;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
        project.Variables[variableGroupPair.Item2].Value = splitResult[splitIndex];
    else project.Variables[variableGroupPair.Item2].Value = "";
}
 
  • Спасибо
Реакции: Rimen

Oleg1987

Client
Регистрация
11.08.2014
Сообщения
1 228
Благодарностей
784
Баллы
113
C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = true;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
string result = "";
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
        result = splitResult[splitIndex];
    else
       result= "";
}
 

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
253
Баллы
63
C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = true;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
string result = "";
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
        result = splitResult[splitIndex];
    else
       result= "";
}
Спасибо за код.
Но при атком исполнении переменные v0-v4 внутри с# не существуют.
в переменную result по-очереди попадают нужные данные, но они не раскладываются на переменные.
что не так делаю?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 407
Благодарностей
9 116
Баллы
113
@Rimen Если на скорую руку, то можно 1-ый вариант кода модернизировать так:
C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = false;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
        project.Variables[variableGroupPair.Item2].Value = splitResult[splitIndex];
    else project.Variables[variableGroupPair.Item2].Value = "";
}

var v0 = project.Variables["v0"].Value;
var v1 = project.Variables["v1"].Value;
var v2 = project.Variables["v2"].Value;
var v3 = project.Variables["v3"].Value;
var v4 = project.Variables["v4"].Value;

// Проверяем:
return v0 + "|" + v1 +"|" + v2 + "|" + v3 + "|" +v4;
 
  • Спасибо
Реакции: doc и Rimen

Rimen

Client
Регистрация
28.10.2019
Сообщения
406
Благодарностей
253
Баллы
63
@Rimen Если на скорую руку, то можно 1-ый вариант кода модернизировать так:
C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = false;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
        project.Variables[variableGroupPair.Item2].Value = splitResult[splitIndex];
    else project.Variables[variableGroupPair.Item2].Value = "";
}

var v0 = project.Variables["v0"].Value;
var v1 = project.Variables["v1"].Value;
var v2 = project.Variables["v2"].Value;
var v3 = project.Variables["v3"].Value;
var v4 = project.Variables["v4"].Value;

// Проверяем:
return v0 + "|" + v1 +"|" + v2 + "|" + v3 + "|" +v4;
Если речь о костылях, то можно сделать так чтобы не задействовать лишние локальные переменные проекта:
C#:
string text = project.ExecuteMacro(project.Variables["time"].Value);
var splitters = " ".ToCharArray();
var allowEmptyEntries = false;
var variableGroupPairs = new Tuple<string, string>[]
{
    new Tuple<string, string>("0", "v0"),
    new Tuple<string, string>("1", "v1"),
    new Tuple<string, string>("2", "v2"),
    new Tuple<string, string>("3", "v3"),
    new Tuple<string, string>("4", "v4"),
};

var v0 = "";
var v1 = "";
var v2 = "";
var v3 = "";
var v4 = "";

var splitResult = text.Split(splitters, allowEmptyEntries ? StringSplitOptions.None : StringSplitOptions.RemoveEmptyEntries).ToList();
foreach (var variableGroupPair in variableGroupPairs)
{
    int splitIndex;
    if (int.TryParse(variableGroupPair.Item1, out splitIndex) && splitIndex >= 0 && splitIndex < splitResult.Count)
    {
        if (v0 == "")
            v0 = splitResult[splitIndex];
        else if (v1 == "")
            v1 = splitResult[splitIndex];
        else if (v2 == "")
            v2 = splitResult[splitIndex];
        else if (v3 == "")
            v3 = splitResult[splitIndex];
        else if (v4 == "")
            v4 = splitResult[splitIndex];


    }
}

// Проверяем:
return v0 + "|" + v1 + "|" + v2 + "|" + v3 + "|" + v4;
но решение сложно назвать изящным, хоть и рабочее :ah:
 
  • Спасибо
Реакции: Sergodjan

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