2015-05-21 6 views
-4

Я сделал решатель линейного уравнения n-переменной для домашней работы в семестре. Он отлично работает (я уже немного помог с сайта) остается только одна функция, которая загружает переменные из файла .dat и копирует их в динамических текстовых окнах в правильном порядке.Заполнение динамических текстовых полей из .dat-файла

Замешанный массив содержит переменные, например, если у меня есть «2x + y = 5», «3x-y = 4» в моем массиве, его следует заменить на {2,1,5} и {3, -1,4}, «ismeretlenek» представляет собой число переменных.

Как заполнить эти текстовые поля из файла .dat?

ismeretlen = (int)numericUpDown1.Value; 

TB = new TextBox[ismeretlen][]; 

for(int i = 0; i < ismeretlen; i++) 
    TB[i] = new TextBox[ismeretlen + 1]; 


int height = 20; 
int width = 40; 
int curX = 10; 
int curY = 10; 

for(int i = 0; i < ismeretlen; i++) 
{ 
    for(int j = 0; j < ismeretlen + 1; j++) 
    { 
     TextBox txtbox = new TextBox(); 
     txtbox = new TextBox(); 
     txtbox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 
     txtbox.Left = curX; 
     txtbox.Top = curY; 
     txtbox.Width = width; 
     txtbox.Height = height; 
     txtbox.Font = new Font(txtbox.Font.FontFamily, 14); 
     txtbox.BackColor = Color.Azure; 
     txtbox.TextAlign = HorizontalAlignment.Center; 
     txtbox.Text = "0"; 

     TB[i][j] = txtbox; 
     this.panel1.Controls.Add(TB[i][j]); 

     curX += width + 15; 
    } 

    curX = 10; 
    curY = curY + height + 20; 
    } 

} 

private void Save_Click(object sender, EventArgs e) 
{ 
    for (int a = 0; a < ismeretlen; a++) 
     segéd[a] = new double[ismeretlen + 1]; 

    for (int a = 0; a < ismeretlen; a++) 
    { 
     for (int b = 0; b < ismeretlen + 1; b++) 
     { 
      segéd[a][b] = double.Parse(TB[a][b].Text); 

     } 
    } 

    string file = ismeretlen+"ismeretlen.dat"; 
    FileStream fs = new FileStream(file, FileMode.Create); 
    BinaryWriter bw = new BinaryWriter(fs); 
    for (int r = 0; r < ismeretlen; r++) 
     for (int t = 0; t < ismeretlen + 1; t++) 
      bw.Write(segéd[r][t]); 

    bw.Close(); 
    fs.Close(); 

} 

private void Load_Click(object sender, EventArgs e) 
{ 

} 

}

+1

Start, пытаясь решить проблему самостоятельно, и видя, какие у вас проблемы. Оттуда, проведя исследование существующей информации о том, как решить эти проблемы, вам необходимо точно описать то, что вы делаете (без включения большого количества информации, не имеющей отношения к проблеме) и какой конкретной проблемой вы сталкиваетесь с этим решение. – Servy

+0

Посмотрите, если файл имеет текст, запишите заметку в форму и загрузите ее из файла .dat. Когда это работает, у вас есть видимые строки уравнений, которые вы можете легко индексировать, разбирать и загружать в свои текстовые поля. Вам нужно использовать динамически построенные ящики? Я бы пошел с загрузкой невидимых ящиков времени разработки и сделал их видимыми по мере необходимости при добавлении данных. –

+0

Ohwait - у C# даже есть компонент Memo? Mebbe Я смешиваю свои языки .. –

ответ

-1
 /* example: 
     * 2x+y=5 
     * 3x-y=4 
     */ 

     var outofFile = new List<string> { "2x+y=5", "3x-y=4" }; 

     var terms = outofFile.Select(x => x.Split(new[] { '+', '-', '=' })); 

     // gets all the numbers to a List<List<double> 
     var numbers = terms.Select(equalation => equalation.Aggregate(new List<double>(), (List<double> listPerLine, string term) => // term is something like '2x' or '4' 
     { 
      double number; 
      if (!double.TryParse(term, out number)) // if no variable inside just a number you can convert it and return it 
      { 
       // cut the variable away eg. 2x -> 2 
       var numberstring = term.Substring(0, term.Length - 1); 
       if (numberstring.Length == 0) 
        number = 1; // eg. if there is only y -> '' -> 1 
       else 
        number = double.Parse(numberstring); // eg 2x -> 2 
      } 
      listPerLine.Add(number); 
      return listPerLine; 
     })).ToList(); 

     /* now you can access the values like this 
     * (indizes zero based) 
     * numbers[equalation indizes][inner coeffizient indizes] 
     * 
     * check out the values 
     * 
     * that way you can assign them to the textboxes. 
     */ 

     var _0_0 = numbers[0][0]; 
     var _0_1 = numbers[0][1]; 
     var _0_2 = numbers[0][2]; 
     var _1_0 = numbers[1][0]; 
     var _1_1 = numbers[1][1]; 
     var _1_2 = numbers[1][2]; 

Это даст вам представление о том, как это сделать. Просто отладить и понять его :), то вы можете продолжить назначая его в текстовые поля ..

Конечно, это может быть улучшен, но в любом случае им будет спать теперь

+0

Спасибо. В строке .dat вы уже можете найти числа. С вашим примером в файле данных есть 2,1,5,3, -1,4. Мне понадобится длина файла .dat, квадратный корень, вокруг него и добавление +1 к нему покажет, сколько чисел должно содержать первый массив. Спасибо за вашу помощь. – Subz6

+0

Вам просто нужно загрузить файл dat строковый список, а затем его выполнение. numbers.count() будет считать равные числа и числа [i] .count() покажет, сколько чисел содержит равенство. – LuckyLikey

Смежные вопросы