Reputation: 459
I have a text file and I need to put all even lines to Dictionary Key and all even lines to Dictionary Value. What is the best solution to my problem?
int count_lines = 1;
Dictionary<string, string> stroka = new Dictionary<string, string>();
foreach (string line in ReadLineFromFile(readFile))
{
if (count_lines % 2 == 0)
{
stroka.Add Value
}
else
{
stroka.Add Key
}
count_lines++;
}
Upvotes: 0
Views: 20959
Reputation: 100321
You can read line by line and add to a Dictionary
public void TextFileToDictionary()
{
Dictionary<string, string> d = new Dictionary<string, string>();
using (var sr = new StreamReader("txttodictionary.txt"))
{
string line = null;
// while it reads a key
while ((line = sr.ReadLine()) != null)
{
// add the key and whatever it
// can read next as the value
d.Add(line, sr.ReadLine());
}
}
}
This way you will get a dictionary, and if you have odd lines, the last entry will have a null value.
Upvotes: 2
Reputation: 186668
String fileName = @"c:\MyFile.txt";
Dictionary<string, string> stroka = new Dictionary<string, string>();
using (TextReader reader = new StreamReader(fileName)) {
String key = null;
Boolean isValue = false;
while (reader.Peek() >= 0) {
if (isValue)
stroka.Add(key, reader.ReadLine());
else
key = reader.ReadLine();
isValue = !isValue;
}
}
Upvotes: 0
Reputation: 726529
Try this:
var res = File
.ReadLines(pathToFile)
.Select((v, i) => new {Index = i, Value = v})
.GroupBy(p => p.Index / 2)
.ToDictionary(g => g.First().Value, g => g.Last().Value);
The idea is to group all lines by pairs. Each group will have exactly two items - the key as the first item, and the value as the second item.
Upvotes: 8
Reputation: 5846
You probably want to do this:
var array = File.ReadAllLines(filename);
for(var i = 0; i < array.Length; i += 2)
{
stroka.Add(array[i + 1], array[i]);
}
This reads the file in steps of two instead of every line separately.
I suppose you wanted to use these pairs: (2,1)
, (4,3)
, ... . If not, please change this code to suit your needs.
Upvotes: 2