powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / replace в цикле.
33 сообщений из 33, показаны все 2 страниц
replace в цикле.
    #38875549
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро!
Вот такая ситуация
как осуществить replace в выражении в цикле? Выражение имеет вид например {1}*{2}-{3}
типа такого где отмечено красным
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  int count = 0;
            foreach (var column in srcFields.Split(','))
            {
                var srcTableAlias = column.Split('.')[0];
                var srcTable = Outt.Data.Tables[GetTableIndex(srcTableAlias)];
               
                var rows = srcTable.Select(srcfilter);
                if (rows.Length == 1)
                {
                    var srcRowIndex = srcTable.Rows.IndexOf(rows[0]);
                    string value;
                    value = GetValue(Outt.Data, srcRowIndex, column).ToString();
                [color=red] expression = expression.Replace("{"+count+"}",value[count]);[/color]
                }
                count++;
            }
...
Рейтинг: 0 / 0
replace в цикле.
    #38875646
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,
Ничего не понял, что вам требуется.

Давайте так - входные данные (только уберите левый мусор (Data.Tables) и прочее)
Потом, что хочется получить на выходе.
...
Рейтинг: 0 / 0
replace в цикле.
    #38875664
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
входные данные: ячейки со значениями: 1.num,2.num,3.num
я их считываю
дополнительно у меня есть строка с выражением {1}*{2}-{3}
в выражении нужно заменить {n} на соответствующее значение value[n] и затем вычислить результат
...
Рейтинг: 0 / 0
replace в цикле.
    #38875679
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я тоже ничего не понял.
в посте есть вопрос
в посте есть ответ

а проблема в чем?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875683
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,

Зачем замена, есть же метод проще:

Код: c#
1.
2.
3.
4.
5.
6.
7.
string calculationTemplate = "{0}*{1}+{2}";

int N1 = 3;
int N2 = 4;
int N3 = 5;

string expressonWithValues = string.Format(calculationTemplate, N1, N2, N3);
...
Рейтинг: 0 / 0
replace в цикле.
    #38875688
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manвходные данные: ячейки со значениями: 1.num,2.num,3.num
я их считываю
дополнительно у меня есть строка с выражением {1}*{2}-{3}
в выражении нужно заменить {n} на соответствующее значение value[n] и затем вычислить результат
))) а {1}*{2}-{3} - точно выражение?
А зачем весь код, если Вы уже заранее знаете значения в ячейках? Я это к чему...3.num - это значение или его "маска"?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875690
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нужно это сделать в цикле, там же где вычисляются value[n]
...
Рейтинг: 0 / 0
replace в цикле.
    #38875696
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или можно создать массив записать туда values , потом заменить в исходном выражении и вычислить его?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875697
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129last_man,

Зачем замена, есть же метод проще:

Код: c#
1.
2.
3.
4.
5.
6.
7.
string calculationTemplate = "{0}*{1}+{2}";

int N1 = 3;
int N2 = 4;
int N3 = 5;

string expressonWithValues = string.Format(calculationTemplate, N1, N2, N3);


Теперь допер что такое выражение ))) "Выражение" может меняться? string.Format(calculationTemplate, N1, N2, N3); не подходит - ТС в результате видимо нужно получить число (умножить и просуммировать значения).
...
Рейтинг: 0 / 0
replace в цикле.
    #38875705
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
выражение - это подстановочное выражение, куда нужно подставить вычисленные значения
...
Рейтинг: 0 / 0
replace в цикле.
    #38875707
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelavikТеперь допер что такое выражение ))) "Выражение" может меняться? string.Format(calculationTemplate, N1, N2, N3); не подходит - ТС в результате видимо нужно получить число (умножить и просуммировать значения).
Я подобные вещи не делал, это надо Code Dome и что-то типа динамических сборок подключать (?)...
Если топикастер пишет свой интерпритатор своего же языка программирования - то ... безумству храбрых...
:-)

Вопрос был про замену в строке.
...
Рейтинг: 0 / 0
replace в цикле.
    #38875713
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,

"ячейки со значениями: 1.num,2.num,3.num"...не совсем понял.
Например, есть ячейка со значением "1.5,2.7,1.4", требуется "взять" 5,7 и 4, и, в соответствии с выражением "{0}*{1}+{2}" получить 5*7+4=39. Я правильно понял?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875716
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manвыражение - это подстановочное выражение, куда нужно подставить вычисленные значенияприведенный код это вроде как делает. string.Format альтернативное решение. Так проблема-то в чем? как подставить или как ВЫЧИСЛИТЬ?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875717
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как подставить
...
Рейтинг: 0 / 0
replace в цикле.
    #38875724
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,
выражение может отличаться от случая к случаю, м.б. 3 переменных, может, 5
на этой строчке у меня ошибка
...
Рейтинг: 0 / 0
replace в цикле.
    #38875735
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manShocker.Pro,
выражение может отличаться от случая к случаю , м.б. 3 переменных, может, 5
на этой строчке у меня ошибка
Вот с этого надо было начинать )))
...
Рейтинг: 0 / 0
replace в цикле.
    #38875752
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man,

параметры можно передавать массивом
string.Format(строка, массив).
Соответственно, если в строке 3 позиции, то и массив должен быть из 3 элементов.
...
Рейтинг: 0 / 0
replace в цикле.
    #38875753
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro приведенный код это вроде как делает
надо наверно вынести за фигурные
string value;
value = GetValue(Outt.Data, srcRowIndex, column).ToString();
expression = expression.Replace("{"+count+"}",value[count]).ToString();
...
Рейтинг: 0 / 0
replace в цикле.
    #38875768
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после expression.Replace("{"+1+"}",value[1]).ToString();
выражение каким было таким и осталось {1}*{2}-{3}
а нужно 123.45*{2}-{3}
...
Рейтинг: 0 / 0
replace в цикле.
    #38875773
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_man123.45
А 123.45 откуда взялось?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875781
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelavikА 123.45 откуда взялось?
value[1]).ToString()
...
Рейтинг: 0 / 0
replace в цикле.
    #38875786
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manBelavikА 123.45 откуда взялось?
value[1]).ToString()
А почему не 45.123?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875801
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manвыражение может отличаться от случая к случаю, м.б. 3 переменных, может, 5По-моему, сначала надо решить, что ты хочешь, а потом это уже программировать.

Что должно происходить, если подстановок меньше, чем аргументов?
Что должно происходить, если подстановок больше, чем аргументов?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875808
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЧто должно происходить, если подстановок меньше, чем аргументов?
Что должно происходить, если подстановок больше, чем аргументов?
просто выход
...
Рейтинг: 0 / 0
replace в цикле.
    #38875812
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manShocker.ProЧто должно происходить, если подстановок меньше, чем аргументов?
Что должно происходить, если подстановок больше, чем аргументов?
просто выход
куда?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875815
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belaviklast_manпропущено...

просто выход
куда?
после "вычислений" полученное значение где используете?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875824
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
получилась строка expression "123,45-15,00-40,00" string
как мне её посчитать теперь?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875829
Фотография Belavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manполучилась строка expression "123,45-15,00-40,00" string
как мне её посчитать теперь?
Я вообще теперь ничего не понимаю. Получилась после чего? В выражении вроде знак "*" был.
...
Рейтинг: 0 / 0
replace в цикле.
    #38875833
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
)) ну можно варьировать выражение
пусть будет expression "123,45*15,00-40,00" string
...
Рейтинг: 0 / 0
replace в цикле.
    #38875834
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
last_manвыражение может отличаться от случая к случаю, м.б. 3 переменных, может, 5
Это язык программирования.
В частном случае - вам надо рядом с каждым шаблоном выражения хранить его описание, сколько переменных..., тип выражения...
Пытаться сделать универсальный парсер строки - по количеству скобочек вычислять сколько должно быть переменных...
А если выражение будет таким: {3}*{1}-{2}
?
...
Рейтинг: 0 / 0
replace в цикле.
    #38875897
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю вам этого достаточно будет.
Впредь старайтесь яснее выражать свои мысли!

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
using System;
using System.Collections.Generic;
using System.Data;

namespace ConsoleApplication6
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            const string testExpression1 = "2 + 3 * 2";
            const string testExpression2 = "123.45-15.00-40.00";

            Console.WriteLine(testExpression1 + " = " + Evaluate(testExpression1));
            Console.WriteLine(testExpression2 + " = " + Evaluate(testExpression2));

            Console.ReadLine();
        }

        public static object Evaluate(String inputExpression)
        {
            var dt = new DataTable();
            return dt.Compute(inputExpression, string.Empty);
        }
    }
}



OUTPUT:

Код: c#
1.
2.
2 + 3 * 2 = 8
123.45-15.00-40.00 = 68,45



З.Ы. с запятыми-точками сами разбирайтесь
...
Рейтинг: 0 / 0
replace в цикле.
    #38875898
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, и МСУ-шный сайт пригодился:
http://codearticles.ru/articles/1371
...
Рейтинг: 0 / 0
replace в цикле.
    #38875997
last_man
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем спасибо, что помогли разобраться :)
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / replace в цикле.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]