Member 13307200 Ответов: 2

Функцию ReadFile контент из каталог (1.txt-9999.txt) с диапазоном(1233.txt -12234.txt)


У меня есть проблема я хочу прочитать определенный диапазон файлов из каталога
p0.txt чтобы p9999.txt.
я хочу читать только текстовые файлы из p1234.txt -p1255.txt с помощью текстового ввода можно выбрать диапазон.
и обрабатывать содержимое каждого файла

Любая помощь будет высоко оценена .

Спасибо

Что я уже пробовал:

Option Strict On
Option Explicit On
Option Infer Off

Imports System.IO

Public Class Form1


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        With OpenFileDialog1
            .FileName = ""
            .Title = "Open Text File"
            .InitialDirectory = "C:\Users\mks\Desktop\newonlindup"
            .Filter = "Sp1|*.sp1"
            .ShowDialog()
        End With
        Dim path As String = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
        TextBox1.Text = Path

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        With OpenFileDialog1
            .FileName = ""
            .Title = "Open Text File"
            .InitialDirectory = "C:\Users\mks\Desktop\newonlindup"
            .Filter = "Sp1|*.sp1"
            .ShowDialog()
        End With
        Dim path As String = System.IO.Path.GetFileName(OpenFileDialog1.FileName)
        TextBox2.Text = path
    End Sub





    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Dim z As String
        Dim a As String
        z = TextBox1.Text
        Console.WriteLine(z.Substring(1, z.Length - 5))
        a = TextBox2.Text
        Console.WriteLine(a.Substring(1, a.Length - 5))

        If TextBox1.Text = "" Or TextBox2.Text = "" Then

            MsgBox("Please fill all text boxes")

        ElseIf z.Substring(1, z.Length - 5) > a.Substring(1, a.Length - 5) Then
            Console.WriteLine("great")
            MsgBox("FROM value Should be greater than TO")
            TextBox2.Focus()
        End If
        TextBox3.Text = TextBox1.Text




    End Sub





    Private Sub Button4_Click(sender As Object, e As PaintEventArgs) Handles Button4.Paint

        '    Private Sub Form1_Load(sender As Object, e As PaintEventArgs) Handles MyBase.Paint
        Dim g As Graphics = e.Graphics


        Dim strTextFromFile As String = IO.File.ReadAllText("C:\Users\mks\Desktop\newonlindup\" + "p1234.SP1")
        Dim strResults As String = String.Empty
        For Each c As Char In strTextFromFile
            If IsNumeric(c) Then
                strResults += c
            End If
        Next
        'g.DrawString(strResults, New Font("Consolas", 12), Brushes.Red, New Point(10, 10))
        MsgBox(strResults)
        Dim path As String = System.IO.Path.GetFileName(OpenFileDialog1.FileName)


    End Sub

       
      
   
End Class

2 Ответов

Рейтинг:
2

Maciej Los

Вы можете использовать Linq для создания диапазона файлов для чтения. Проверить это:

Dim iStart As Integer = 1234
Dim iEnd As Integer = 1255

Dim fileRange As List(Of String) = Enumerable.Range(iStart, iEnd - iStart + 1). _
	Select(Function(f) String.Concat("p", f, ".txt")). _
	ToList()


fileRange возвращается:
p1234.txt 
p1235.txt 
p1236.txt 
p1237.txt 
...
p1255.txt 


Рейтинг:
12

OriginalGriff

Есть два основных способа сделать это, но оба требуют цикла.

1) подход "грубой силы и невежества".
Настройка цикла с целочисленной переменной fileNo это длится с 1233 по 1255 год включительно.
Внутри цикла используйте строку.Формат для создания имен файлов:

Dim name as String = String.Format("p{0}.txt", fileNo)
Затем вы можете использовать файл.Существует, чтобы проверить, есть ли файл, и если да, то вы его читаете.

2) "избирательный" подход.
Начните с чтения списка всех файлов с помощью каталога.Заражен:
Dim files As String() = Directory.GetFiles("D:\temp\", "p*.txt")

Затем используйте цикл For Each для обработки каждого файла.
Внутри цикла проверьте, находится ли имя в диапазоне
For Each file As String In files
	Dim name As String = Path.GetFileNameWithoutExtension(file)
	Dim fileNo As Integer
	If Integer.TryParse(name.Substring(1), fileNo) AndAlso fileNo >= 1233 AndAlso fileNo <= 1255 Then
		' Process the file here.
	End If
Next
Первый работает лучше всего, если это короткий диапазон, без пробелов.
Второй работает лучше всего, если это больший диапазон, в котором есть пробелы.


Maciej Los

Еще один "селективный" подход - использование Linq ;)
Овации,
Мацей

Member 13307200

это очень эффективно, сэр...
Большое спасибо!