Показано с 1 по 3 из 3

Тема: Преобразование стройки в список List<double> в скрипте C# MasterScada

  1. #1

    По умолчанию Преобразование стройки в список List<double> в скрипте C# MasterScada

    Ребята, приветствую! Я начинающий в C#, поэтому прошу у вас совета. Имеется представленный ниже код. Задача состоит в том, чтобы взять строковую переменную, которую будет вводить оператор компьютера (n-ое количество значений через запятую и пробел), разобрать на список List<double>, чтобы использовать эти значения вместо списка "new List<double> { 0, 79.8491, ... 9999 }". Пытался через "sample1.Split(',').Select(val => Convert.ToDouble(val)).ToList()", но через него код не хочет работать, хотя и проходит компиляцию. Может ест me кого какие идеи?

    Код:
    using System;
    using MasterSCADA.Script.FB;
    using MasterSCADA.Hlp;
    using FB;
    using FB.FBAttributes;
    using System.Linq;
    
    
    using System;
    using System.Collections.Generic;
    
    
    [FBRetain]
    public partial class ФБ : ScriptBase
    {
      
      
         public override void Execute() {
         
         	List<double> height = new List<double> { 0, 79.8491, 106.5155, 157.1572, 235.2096, 318.5623, 390.807, 424.9339, 569.5301, 677.4991, 800.0812, 9999 };
        	List<double> age = new List<double> { 2157.251364, 2157.251364, 2163.506142, 2163.074778, 2157.682728, 2154.66318, 2153.153406, 2152.290678, 2153.153406, 2154.878862, 2157.89841, 2157.89841 };
        	
        	//var sample1 = "80.6376, 105.9068, 156.5394, 234.7748, 318.403, 391.3434, 425.3548, 565.7305, 678.4589, 801.8177";
        	//var sample2 = "2250.015025, 2252.720725, 2256.10285, 2255.6519, 2255.6519, 2258.583075, 2257.230225, 2243.47625, 2261.739725, 2267.602075";
        	//var height = sample1.Split(',').Select(val => Convert.ToDouble(val)).ToList();
        	//var age = sample2.Split(',').Select(val => Convert.ToDouble(val)).ToList();
        	
        	double x = ЗначениеРасхода.Value;
        	double y = linearInterpolation(height, age, x);
        	РассчитанныйКоэфициентПоЛинИнтерп = linearInterpolation(height, age, x);
        }
         
     
         public static double linear_interpolation_two_points(
        		double x1, 
        		double y1, 
        		double x2, 
        		double y2, 
        		double x) {
        			double y = (x - x1) * (y1 - y2) / (x1 - x2) + y1;
        			return y;
        			}
           
           
           
           public static double linearInterpolation(
             List<double> xValue, 
             List<double> yValue, 
             double x ) {
           
        		for (int i = 0; i < xValue.Count - 1; i++) {
            		
            		if (xValue[i] <= x && x <= xValue[i + 1]) {
            			double x1 = xValue[i];
        				double x2 = xValue[i + 1];
            			double y1 = yValue[i];
            			double y2 = yValue[i + 1];
            			return linear_interpolation_two_points(x1, y1, x2, y2, x);
            		}
        		}
        	//System.Console.WriteLine( "Значение расхода вне диапазона" );
        	throw new ArgumentException("Вне диапазона");
          }
         
     }

  2. #2

    По умолчанию

    У вас строка с ошибками - во первых пробел убрать, во вторых указать что преобразование с учетом точки идет
    using System.Globalization;
    var height = sample1.Replace(" ","").Split(',').Select(val => Double.Parse(val,CultureInfo.InvariantCulture)).To List();
    Спасибо.

  3. #3

    По умолчанию

    Спасибо за ответ! Попробовал. Выдает ошибку "(CS1002) ожидалась ;" в строках "var height = ..." и "var age = ...". Не могу понять, что не нравится компилятору, где должна быть ";".

    Код:
         public override void Execute() {
        	var sample1 = "80.6376, 105.9068, 156.5394, 234.7748, 318.403, 391.3434, 425.3548, 565.7305, 678.4589, 801.8177";
        	var sample2 = "2250.015025, 2252.720725, 2256.10285, 2255.6519, 2255.6519, 2258.583075, 2257.230225, 2243.47625, 2261.739725, 2267.602075";
        	var height = sample1.Replace(" ","").Split(',').Select(val => Double.Parse(val,CultureInfo.InvariantCulture)).To List();
        	var age = sample2.Replace(" ","").Split(',').Select(val => Double.Parse(val,CultureInfo.InvariantCulture)).To List();
        	double x = ЗначениеРасхода.Value;
        	double y = linearInterpolation(height, age, x);
        	РассчитанныйКоэфициентПоЛинИнтерп = linearInterpolation(height, age, x);
        }

    Проблему нашел - ToList пишется слитно. Может кто-то столкнется с этой задачей в будущем.
    Последний раз редактировалось groom; 28.02.2022 в 13:52.

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 29.06.2021, 22:01
  2. Прочитать по RS-485 число типа Double
    от Карбофос в разделе ПЛК1хх [М02]
    Ответов: 6
    Последнее сообщение: 20.12.2019, 11:21
  3. Ответов: 1
    Последнее сообщение: 16.05.2019, 23:01
  4. ПЛК110-24.30.Р-М (обновленный) и DOUBLE переменные
    от SVKEnergy в разделе ПЛК1хх [М02]
    Ответов: 6
    Последнее сообщение: 11.02.2019, 16:20
  5. Ответов: 4
    Последнее сообщение: 07.06.2018, 17:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •