[Help] Đọc file text 40k dòng tách chuỗi lấy giá trị từng dòng

Nơi trao đổi về các vấn đề trong lập trình Windows Forms, Console dùng cú pháp ngôn ngữ Visual Basic .NET và C#

Moderators: tungblt, vuathongtin

Post Reply
sondvb
Posts: 2
Joined: Thu 11/06/2020 1:43 pm

[Help] Đọc file text 40k dòng tách chuỗi lấy giá trị từng dòng

Post by sondvb »

Chào các bác,
Em mới tập tành học C# WF để viết tools
Em mới tự viết 1 tools xử lý file text và tách chuỗi từng dòng
Nhưng tools chỉ chạy đươc khi số dòng nhỏ hơn 1k dòng nếu số dòng lớn hơn 1k dòng sẽ bị treo tools.
Các bác giúp em xem có cách khác để xử lý hay hơn không ạ ?

Code: Select all

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Text.RegularExpressions;

namespace SSH
{
    
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var fileContent = string.Empty;
            var filePath = string.Empty;

            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.InitialDirectory = "c:\\";
                openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                openFileDialog.FilterIndex = 2;
                openFileDialog.RestoreDirectory = true;

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    //Get the path of specified file
                    filePath = openFileDialog.FileName;
                    textBox1.Text = filePath;
                    //Read the contents of the file into a stream
                    var fileStream = openFileDialog.OpenFile();

                    using (StreamReader reader = new StreamReader(fileStream))
                    {
                        fileContent = reader.ReadToEnd();
                        textBox2.Text=fileContent;
                        int Line = textBox2.Lines.Length;
                        label2.Text = Line + "";
                    }
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            foreach (var line in File.ReadLines(textBox1.Text))
            {
                string[] giatri = line.Split('|');
                textBox3.Text += giatri[0] + "|" + giatri[1] + "|" + giatri[2] + "|" + giatri[5] + "|" + giatri[7] + "|" + "XShare.Pro" + "\r\n";
                //ListBox1.Items.Add(words[1]);
                //ListBox2.Items.Add(words[2].Trim('"'));
            }

        }
    }
}
Link file du lieu đây ạ: https://drive.google.com/file/d/1pKTBdz ... sp=sharing
Attachments
Capture222.JPG
User avatar
thuanfun
Thành viên tích cực
Thành viên tích cực
Posts: 153
Joined: Thu 06/11/2008 7:46 pm
Been thanked: 14 times

Re: [Help] Đọc file text 40k dòng tách chuỗi lấy giá trị từng dòng

Post by thuanfun »

Chỗ làm bạn chậm là:
1. Ghép nối các đoạn string bằng phép cộng, và
2. Hiển thị kết quả ra màn hình liên tục
  1. textBox3.Text += giatri[0] + "|" + giatri[1] + "|" + giatri[2] + ....



Do đó để code chạy nhanh hơn bạn cần:
1. Hạn chế dùng phép cộng cho việc nối các string: bạn có thể dùng StringBuilder, hoặc List<String>
2. Không hiển thị liên tục ra màn hình (TextBox): khi nào xong mới hiển thị kết quả

  1. var outList = new List<string>();
  2. var lines = System.IO.File.ReadAllLines(textBox1.Text); // file path
  3. foreach (var line in lines)
  4. {
  5.      var giatri = line.Split('|');
  6.      outList.Add(giatri[0] + "|" + giatri[1] + "|" + giatri[2] + "|" + giatri[5] + "|" + giatri[7] + "|" + "XShare.Pro");
  7. }
  8. textBox3.Text = string.Join("\r\n", outList.ToArray());
Nhận code VB.NET theo yêu cầu
sondvb
Posts: 2
Joined: Thu 11/06/2020 1:43 pm

Re: [Help] Đọc file text 40k dòng tách chuỗi lấy giá trị từng dòng

Post by sondvb »

Vâng ạ,
em cảm ơn bác @thuanfun rất nhiều ạ.
Post Reply

Return to “Visual Basic .NET và C# (VB.NET & C#)”