简体   繁体   中英

How to save the strings in array and display the next string array if match found?

I read the *.txt file from c# and displayed in the console.

My text file looks like a table.

diwas      hey
ivonne     how
pokhara    d kd
lekhanath  when
dipisha    dalli hos
dfsa       sasf

Now I want to search for a string "pokhara" and if it is found then it should display the "d kd" and if not found display "Not found"

What I tried?

string[] lines = System.IO.ReadAllLines(@"C:\readme.txt");
foreach(string line in lines)
{
    string [] words = line.Split();
    foreach(string word in words)
    {
        if (word=="pokhara")
        {
            Console.WriteLine("Match Found");
        }
    }
}

My Problem: Match was found but how to display the next word of the line. Also sometimes in second row some words are split in two with a space, I need to show both words.

I guess your delimiter is the tab-character, then you can use String.Split and LINQ:

var lineFields = System.IO.File.ReadLines(@"C:\readme.txt")
    .Select(l => l.Split('\t'));
var matches = lineFields
    .Where(arr => arr.First().Trim() == "pokhara")
    .Select(arr => arr.Last().Trim());
// if you just want the first match:
string result = matches.FirstOrDefault();  // is null if not found

If you don't know the delimiter as suggested by your comment you have a problem. If you don't even know the rules of how the fields are separated it's very likely that your code is incorrect. So first determine the business logic, ask the people who created the text file. Then use the correct delimiter in String.Split .

If it's a space you can either use string.Split() (without argument), that includes spaces, tabs and new-line characters or use string.Split(' ') which only includes the space. But note that is a bad delimiter if the fields can contain spaces as well. Then either use a different or wrap the fields in quoting characters like "text with spaces" . But then i suggest a real text-parser like the Microsoft.VisualBasic.FileIO.TextFieldParser which can also be used in C#. It has a HasFieldsEnclosedInQuotes property.

This works ...

  string[] lines = System.IO.ReadAllLines(@"C:\readme.txt");
    string stringTobeDisplayed = string.Empty;
    foreach(string line in lines)
    {
        stringTobeDisplayed = string.Empty;
        string [] words = line.Split();
         //I assume that the first word in every line is the key word to be found
          if (word[0].Trim()=="pokhara")
            {
                Console.WriteLine("Match Found");

                for(int i=1 ; i < words.Length ; i++)
                 {
                     stringTobeDisplayed += words[i]
                 }

                 Console.WriteLine(stringTobeDisplayed);

            }

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM