Как загрузить отдельные текстовые файлы в определенные текстовые поля - PullRequest
0 голосов
/ 04 мая 2018

Я создал проект в приложении C # Windows. Я использую .Net Framework версии 4.0 и Visual Studio 2010. Проект содержит кнопку Сохранить и загрузить файл. А также некоторые текстовые поля.

Я создал текстовый файл, подобный этому

Serial Number = 1
Type Number = 500
Test Engineer = jay
Date = 03/05/2018
Time = 16:17:20 PM
Test1 = 1.00
Test2 = 1.76
.
.
.
Test18 = 4.66

Код кнопки загрузки файла:

private void btn_LoadFile_Click(object sender, EventArgs e)
{
    OpenFileDialog fdlg = new OpenFileDialog();
    if (fdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        System.IO.StreamReader sr = new
        System.IO.StreamReader(fdlg.FileName);

        string[] lines = sr.ReadToEnd().Split('\n');
        tb_SerialNo.Text = lines[0];
        tb_TypeNo.Text = lines[1];
        tb_TestEngineer.Text = lines[2];
        tb_Date.Text = lines[3];
        tb_Test1.Text = lines[4];
        tb_Test2.Text = lines[5];
    }  
}

Когда я запускаю вышеуказанный код, я получаю значение в текстовом поле Serial no * Serial Number = 1, но я хочу 1 в текстовом поле. То же самое Type Number Текстовое поле Type Number = 500, но здесь также я хочу 500 в текстовом поле Тип номера.

Ответы [ 3 ]

0 голосов
/ 04 мая 2018
    private void btn_LoadFile_Click(object sender, EventArgs e)
    {
        OpenFileDialog fdlg = new OpenFileDialog();
        if (fdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            System.IO.StreamReader sr = new
            System.IO.StreamReader(fdlg.FileName);

            string[] lines = sr.ReadToEnd().Split('\n');
            PrintText(tb_SerialNo, lines[0]);
            PrintText(tb_TypeNo , lines[1]);
            PrintText(tb_TestEngineer, lines[2]);
            PrintText(tb_Date, lines[3]);
            PrintText(tb_Test1, lines[4]);
            PrintText(tb_Test2, lines[5]);
        }

    }
    private void PrintText(TextBox control, string line)
    {
        var splitline = line.Split('=');
        control.Text = splitline[1];
    }

попробуйте это

0 голосов
/ 04 мая 2018

Вы можете использовать string.Split () или string.LastIndexOf () , чтобы извлечь необходимую часть из исходной строки.

Например:

Здесь мы разбиваем строку на две части при обнаружении символа '='. Дополнительный пробел поднимается на Trim(), который используется для удаления пробелов в передней и задней частях строки.

tb_Test2.Text = lines[5].Split('=').Last().Trim();

или

LastIndexOf() находит указанный символ, начиная поиск с конца строки, и возвращает его позицию (если он его находит, иначе -1).

Substring() генерирует новую строку из предоставленной, начиная с позиции и принимая указанное количество символов.
Здесь, начиная с индекса, возвращаемого LastIndexOf(), и включая все символы до конца строки (если вы не укажете, сколько символов требуется, он принимает их все. Это перегрузка метода).

tb_Date.Text = lines[3].Substring(lines[3].LastIndexOf("=") + 1).TrimStart();

В обоих случаях исходная строка остается нетронутой.

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

string[] lines2 = lines.Select(s => s.Split('=').Last().Trim()).ToArray();

tb_SerialNo.Text = lines2[0];
tb_TypeNo.Text = lines2[1];
//(...)
0 голосов
/ 04 мая 2018

При разделении на новую строку lines[0] будет хранить Serial Number = 1. Здесь вам нужно снова разделить его на =.

Если вы попытаетесь вывести значения каждого элемента из строкового массива, вы поймете, какие изменения необходимо внести в ваш код.

 private void btn_LoadFile_Click(object sender, EventArgs e)
    {
        OpenFileDialog fdlg = new OpenFileDialog();
        if (fdlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            System.IO.StreamReader sr = new
            System.IO.StreamReader(fdlg.FileName);

            string[] lines = sr.ReadToEnd().Split('\n'); //To make your code more readable, you can use "Environment.NewLine" instead of '\n'
            Console.WriteLine(lines[0]); //Here it will give "Serial Number = 1"
            // you need to store 1 in tb_SerialNo.Text, so split lines[0] with =
           //Have you tried with this.
            string[] splitWithEqualTo = lines[0].Split('=');
            tb_SerialNo.Text = splitWithEqualTo [1];
          //Similar kind of logic you can apply for other text boxes.
        }  
    }

Чтобы исправить проблему, попробуйте следующее:

Console.WriteLine(lines[0]); // This will print "Serial Number = 1"
string[] slitLine = lines[0].Split('=');
Console.WriteLine(slitLine[0]); //This will print "Serial Number"
Console.WriteLine(slitLine[1]); //This will print 1, this is what you need to store in tb_SerialNo.Text, right?

Это не решение, но вы поймете, какие изменения необходимо внести в ваш код.


...