[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#

Các điều hành viên: tungblt, vuathongtin

Đăng trả lời
sondvb
Bài viết: 2
Ngày tham gia: Thứ 5 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

Gửi bài 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 ạ ?

Mã: Chọn tất cả

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
Tập tin đính kèm
Capture222.JPG
Hình đại diện của thành viên
thuanfun
Thành viên tích cực
Thành viên tích cực
Bài viết: 153
Ngày tham gia: Thứ 5 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

Gửi bài 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
Bài viết: 2
Ngày tham gia: Thứ 5 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

Gửi bài by sondvb »

Vâng ạ,
em cảm ơn bác @thuanfun rất nhiều ạ.
Đăng trả lời

Quay về