Вывод нужной строки

  • Автор темы Belka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Belka

Гость
#1
Кто знает, подскажите.
На фрме есть кнопка при ее нажатии программа должна открыть файл и считать оттуда нужную строку с выводом этой строки в ToolBox.Text.

Пример файла:
#1
blabla bum
#2
tok tuk
#3
.....

В зависимости от выбора в форме 1,2,3 и т.д. должна быть выведена соответствующая строка.
За ранее спасибо.
 
D

Dr.Gigabit

Гость
#2
Что-то вроде такого:

Код:
using System;
using System.IO;

class Test 
{
   public static void Main() 
   {
       try 
       {
           // Create an instance of StreamReader to read from a file.
           // The using statement also closes the StreamReader.
           using (StreamReader sr = new StreamReader("TestFile.txt")) 
           {
               String line;
               // Read and display lines from the file until the end of 
               // the file is reached.
               int i = 0;
              while ((line = sr.ReadLine()) != null) 
               {
                    i++; 
                    if (i == index) // index - нужная нам строка
                     Console.WriteLine(line); // выводим на экран или проводим другие манипуляции
               }
           }
       }
       catch (Exception e) 
       {
           // Let the user know what went wrong.
           Console.WriteLine("The file could not be read:");
           Console.WriteLine(e.Message);
       }
   }
}
А вообще, может вам в сторону XML посмотреть? Уж очень коряво так делать с текстовым файлом
 
B

Belka

Гость
#3
Спасибочки! Попробую. Но мне нужно именно так, да и в XML нет времени разбираться.
Еще раз 10tnx.
 
B

Belka

Гость
#4
Еще раз огромное спасибо. Еще один вопросик. В файле идет строка: парам парам парам... Я ее передала в ToolBox.Text, но она выводится целой строкой и приходится подбирать пробелы. Нужно:
парам
парам
парам...
Пробовала вставлять в середину текста \r\n, но почему-то не пошло. Не подскажите, а?
 
D

Dr.Gigabit

Гость
#6
А вообще вот такой вариант можете попробовать


Код:
#region Using directives

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

#endregion

namespace ConsoleApplication1
{
   class Program
   {
       static void Main(string[] args)
       {
           Regex regex = new Regex(@" "); // здесь регулярное выражение для поиска разделителей. В нашем случае пробел
           string[] parts = regex.Split("парам парам парам");
           foreach (string part in parts)
               Console.WriteLine(part);
       }
   }
}
 
B

Belka

Гость
#7
Спасибо. Но что-то меня это смусщает.

using(StreamReader sr=new StreamReader(m_strPath+h+".txt", Encoding.GetEncoding("windows-1251")
{
int y=0;
while((line=sr.ReadLine())!=null)
{
y++;
if(y==j)
tBox1.Text=line;
}
}

Вот мой кусок. В line лежит строка "парам парам парам" и ее-то и нужно, когда я ее запихиваю в ToolBox.Text, что бы она выводилась уже как:
парам
парам
парам...
 
D

Dr.Gigabit

Гость
#8
Спасибо. Но что-то меня это смусщает.
А что конкретно смущает? RegExp'ы? C ними нужно дружить;)

А что такое j? В приведенном коде я не вижу места которое разделяет строку на подстроки...Я имел ввиду, что бы вы привели именно эту часть вашего кода
 
B

Belka

Гость
#9
j - это переменная которая обрабатывается еще и при выводе изображения. В зависимости от ее значения выводится соответствующая картинка, соответственно к картинке выводится соответствующая строка (парам парам парам)из текстовика. Но вот эта строка и должна отображатся не как одна целая, а разбившись на три строки
парам
парам
парам...
;)
 
D

Dr.Gigabit

Гость
#10
А чем мой код не подходит? Если строка валидная, т.е разбивать нужно только по пробелам... Если могут быть еще какие-то разделители - с регулярными выражениями пошаманить;)
 
B

Belka

Гость
#12
;) Не идет, выводит только последний "парам" из трех, а не все три, но в столбик. Я их разделила табом
Код:
Regex regex=new Regex(@"	");//
using(StreamReader sr=new StreamReader(m_strPath+h+".txt", Encoding.GetEncoding("windows-1251")))
{
 int y=0;
 while((line=sr.ReadLine())!=null)
 {
 	y++;
 	if(y==j)
 	{
  string[] parts=regex.Split(line);//
  foreach(string part in parts)//
  tBox1.Text=part;//line
 	}
 }
}
 
D

Dr.Gigabit

Гость
#13
Конечно, последний, т.к у вас tBox1.Text в цикле присваиватеся каждый раз новый;)

Нужно вот так tBox1.Text += part; // можно tBox1.Text += Enviroment.Nevline; tBox1.Text += part;
 
B

Belka

Гость
#14
Вот я тормоз. ;) Это наверно от переутомления.
Только я не поняла, что это такое Enviroment.Nevline. В хэлпе у меня этого нет. У меня VS 2003 и там такого почему-то нет.
 
D

Dr.Gigabit

Гость
#15
Сорри, Environment.NewLine - аналог "\r\n".
Для переносимости между платформами :D
 
B

Belka

Гость
#16
А почему если в программе в переменную я внесу "\r\n", то все сработает. А вот если из текстового файла в переменную загнать строку с "\r\n", то ничего не работает? Странно ведь для компилятора по идее, что одна переменная, что вторая должны быть одинаковые.
 
D

Dr.Gigabit

Гость
#17
Сорри не понял, что значит работает и не работает. Можно пример?
 
B

Belka

Гость
#18
Ну когда в самой программе я указываю к примеру:
public string foo="boom\r\nhuum\r\npoom";
toolBox1.Text=foo;
то выведется:
boom
huum
poom
А если я в текстовом файле напишу:
boom\r\nhuum\r\npoom
Потом эту строку передам в переменную foo (public string foo;)
и сделаю toolBox1.Text=foo; то выведится boom\r\nhuum\r\npoom
Почему? Ведь и в первом и во втором случае значение foo одинаковое.
 
D

Dr.Gigabit

Гость
#19
Нет, на самом деле \n - это управляющий символ, интерпретация его зависит от операционной системы. Т.е допустим, для MS-DOS \n это OxOD(возврат курсора) и OxOA(перевод строки) При чтении такого файла каждое вхождение этой пары байт заменяется на '\n'
 
B

Belka

Гость
#20
Это я знаю, но почему когда из файла я загнала строку с этими управляющими символами, они не отработались, а вывелись на экран? Мне надо, чтоб было на оборот.
 
Статус
Закрыто для дальнейших ответов.