Member 12712519 Ответов: 2

Как выбрать определенный столбец в текстовом файле и выполнить поиск строки? Если строка найдена, то извлеките всю строку целиком.


 I want to search for a string in a specific column say column number 213 from a text file. And if the string is found then i want to display the whole row belonging to it.


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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;

using Excel = Microsoft.Office.Interop.Excel;



using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog fdlg = new OpenFileDialog();
            fdlg.Title = "C# Corner Open File Dialog";
            fdlg.InitialDirectory = @"d:\test";
            fdlg.Filter = "All files (*.*)|*.*|All files (*.*)|*.*";
            fdlg.FilterIndex = 2;
            fdlg.RestoreDirectory = true;





            if (fdlg.ShowDialog() == DialogResult.OK)
            {
                MessageBox.Show("selected file is :" + fdlg.FileName);

            }

            float counter = 0;
            string line;





            // Read the file and display it line by line.
            System.IO.StreamReader file = new System.IO.StreamReader(fdlg.FileName);
            try
            {
                while ((line = file.ReadLine()) != null)
                {


                    //string[] col = line.Split(new string[] { " " }, StringSplitOptions.None);



                    string[] col = line.Split(new string[] { "  " }, StringSplitOptions.None);


                    if (col.Contains("3"))
                    {

                        MessageBox.Show(counter.ToString() + ": " + line);
                        counter++;
                    }

                                       
                }
            
              
                   
            
            }




            catch (IndexOutOfRangeException ae)
            {
                string err = ae.Message;
                
            }



            file.Close();





        }
        






    }
}

2 Ответов

Рейтинг:
8

Member 12712519

Привет, сэр, спасибо вам за решение. Могу ли я открыть файл excel и выполнить поиск по определенному столбцу, а если найду, то получить всю строку целиком? Можете ли вы продемонстрировать это на приведенном выше примере?


Karthik_Mahalingam

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

Рейтинг:
0

OriginalGriff

Текстовые файлы не имеют "столбцов" - в них даже нет строк!
Текстовый файл - это строка символов, некоторые из которых интерпретируются системой как терминаторы строк при доступе к ним с помощью "линейных" методов, таких как ReadLine и ReadAllLines. Это означает две вещи:
1) Во-первых, что не все линии должны быть одинаковой длины. Просто потому, что одна строка содержит 300 символов, это не значит, что все остальные имеют.
2) Во-вторых, в строке также нет столбцов: нет такой" структуры", автоматически встроенной в текстовый файл.

То, что ваш код, по - видимому, делает, - это разделение строк на основе пробелов-или "извлечение слов" на английском языке. Этот код подразумевает, что то, что вы пытаетесь сделать, это найти строку с определенным значением в 213 - м Слове-что возможно, но маловероятно: этот ответ до сих пор не имеет такого количества слов ни в одном абзаце!
Самый длинный - 62!
Этот код сделает то, что вы просите, но я думаю, что вам нужно переосмыслить то, что вы пытаетесь сделать:

string[] lines = File.ReadAllLines(strPathToFile);
int wordNo = 213;
string seekWord = "3";
foreach (string line in lines)
    {
    string[] words = line.Split(' ');
    if (words.Length >= wordNo && words[wordNo - 1] == seekWord)
        {
        Console.WriteLine(line);
        }
    }