В.NET существует ли строковое математическое средство анализа?

Вам нужно проанализировать первую строку, создать столбцы и затем перейти к остальным строкам.

Например:

columns = []
with open(file,'rU') as f: 
    reader = csv.reader(f)
    for row in reader:
        if columns:
            for i, value in enumerate(row):
                columns[i].append(value)
        else:
            # first row
            columns = [[value] for value in row]
# you now have a column-major 2D array of your file.
as_dict = {c[0] : c[1:] for c in columns}
print(as_dict)

вывод:

{
    ' numbers': [' 1', ' 2', ' 3', ' 4'], 
    ' colors ': [' blue', ' red', ' green', ' yellow'],
    'strings': ['string1', 'string2', 'string3', 'string4']
}

(некоторые странные пробелы, которые находились в вашем «файле». Удалите пробелы до / после запятых или используйте value.strip(), если они находятся в вашем реальном вводе.)

80
задан Guy 10 December 2008 в 04:14
поделиться

3 ответа

Вы могли добавить ссылку на Microsoft Script Control Library (COM) и использовать код как это для оценки выражения. (Также работы для JScript.)

Dim sc As New MSScriptControl.ScriptControl()
sc.Language = "VBScript"
Dim expression As String = "1 + 2 * 7"
Dim result As Double = sc.Eval(expression)

Редактирование - версия C#.

MSScriptControl.ScriptControl sc = new MSScriptControl.ScriptControl();
sc.Language = "VBScript";
string expression = "1 + 2 * 7";
object result = sc.Eval(expression);            
MessageBox.Show(result.ToString());

Редактирование - ScriptControl является COM-объектом. В, "Добавляют, ссылочное" диалоговое окно проекта выбирает вкладку "COM" и прокручивает вниз к "Microsoft Script Control 1.0" и выбору хорошо.

52
ответ дан user21826 5 November 2019 в 17:32
поделиться

Для кого-либо разрабатывающего в C# на Silverlight вот довольно аккуратный прием, что я только что обнаружил, что это позволяет оценку выражения путем обращения к механизму JavaScript:

double result = (double) HtmlPage.Window.Eval("15 + 35");
28
ответ дан Guy 5 November 2019 в 17:32
поделиться

На самом деле есть своего рода встроенное - можно использовать пространство имен XPath! Хотя это требует переформатирования строки для подтверждения с помощью нотации XPath. Я использовал такой метод для работы с простыми выражениями:

    public static double Evaluate(string expression)
    {
        var xsltExpression = 
            string.Format("number({0})", 
                new Regex(@"([\+\-\*])").Replace(expression, " ${1} ")
                                        .Replace("/", " div ")
                                        .Replace("%", " mod "));

        return (double)new XPathDocument
            (new StringReader("<r/>"))
                .CreateNavigator()
                .Evaluate(xsltExpression);
    }
15
ответ дан 24 November 2019 в 09:29
поделиться