• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[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

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

Postby sondvb » Thu 11/06/2020 1:53 pm

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: 146
Joined: Thu 06/11/2008 7:46 pm
Been thanked: 11 times

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

Postby thuanfun » Wed 24/06/2020 8:20 pm

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ả

[csharp]
var outList = new List<string>();
var lines = System.IO.File.ReadAllLines(textBox1.Text); // file path
foreach (var line in lines)
{
var giatri = line.Split('|');
outList.Add(giatri[0] + "|" + giatri[1] + "|" + giatri[2] + "|" + giatri[5] + "|" + giatri[7] + "|" + "XShare.Pro");
}
textBox3.Text = string.Join("\r\n", outList.ToArray());
[/csharp]
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

Postby sondvb » Fri 26/06/2020 6:45 am

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


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

Who is online

Users browsing this forum: No registered users and 19 guests