Question

I am trying to get a list of words (below) to be put into an array. I want each word to be in it's own index.

Here is my code that I have so far.

string badWordsFilePath = openFileDialog2.FileName.ToString();
StreamReader sr = new StreamReader(badWordsFilePath);
string line = sr.ReadToEnd();
string[] badWordsLine = line.Split(' ');
int BadWordArrayCount = 0;
foreach (string word in badWordsLine)
{
    badWords[BadWordArrayCount] = word;
    BadWordArrayCount = BadWordArrayCount + 1;
}
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

Here is the list of words I want to import.

label
invoice
post
document
postal
calculations
copy
fedex
statement
financial
dhl
usps
8
notification
n
irs
ups
no
delivery
ticket

If someone could give me an example of how to get this to work, that would be a huge help.

Was it helpful?

Solution

Simplified code:

string badWordsFilePath = openFileDialog2.FileName.ToString();
string[] badWords = File.ReadAllLines(badWordsFilePath);
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

OTHER TIPS

If every word starts on a new line then you do not need to create a for loop. The Split method will convert to an array for you.

string badWordsFilePath = openFileDialog2.FileName.ToString();
StreamReader sr = new StreamReader(badWordsFilePath);
string line = sr.ReadToEnd();

string[] badWords = line.Split('\n');

You are splitting on space, but there is a newline between each word. Split on newline instead:

string[] badWordsLine = line.Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

Then you have to create the array to put the words in:

badWords = new string[badWordsLine.Length];

However, to loop through a string array just to copy the strings to a string array seems pointless. Just assing the string array to the variable. Also, you forgot to close the stream reader, which is best taken care of with a using block:

string badWordsFilePath = openFileDialog2.FileName.ToString();
string line;
using (StreamReader sr = new StreamReader(badWordsFilePath)) {}
  line = sr.ReadToEnd();
}
badWords = line.Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
int test = badWords.Length;
MessageBox.Show("Words have been imported!");
BadWordsImported = true;

Maybe try this modification? It allows on splitting on various white spaces.

     string badWordsFilePath = openFileDialog2.FileName.ToString();
            StreamReader sr = new StreamReader(badWordsFilePath);
            string line = sr.ReadToEnd();
            string[] badWordsLine = line.Split(new string[] {" ", "\t", "\r\n"}, StringSplitOptions.RemoveEmptyEntries);
            int BadWordArrayCount = 0;
            foreach (string word in badWordsLine)
            {
                badWords[BadWordArrayCount] = word;
                BadWordArrayCount = BadWordArrayCount + 1;
            }
            int test = badWords.Length;
            MessageBox.Show("Words have been imported!");
            BadWordsImported = true;

Do you have to use a StreamReader? If you do not have to, then this code is clearer (in my opinion).

string text = File.ReadAllText(badWordsFilePath);
string[] words = Regex.Split(text, @"\s+");

If you're 100% certain that each word is on its own line and there are no empty lines, this might be overkill; and the File.ReadAllLines suggestion by @Ulugbek Umirov is simpler.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top