Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 18:22   #1
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию Чтение файла .txt

Каким способом можно считать текстовый файл?

Через stream.Reader только?

Допустим есть какой-то текстовый файл, в нем есть пара строчек текста, чтобы потом можно было этот текст изменять (к примеру заглавные буквы поменять на строчные) и сохранить изменения в этом файле.
RIOs вне форума Ответить с цитированием
Старый 22.04.2012, 18:54   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

TextReader, к примеру.
_-Re@l-_ вне форума Ответить с цитированием
Старый 22.04.2012, 19:18   #3
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию

Спасибо. Правда я с TextReader'ом так и не разобрался. MSDN читал - толку ноль. Нашел там пару интересных решений по считыванию.

Код:
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.
                while ((line = sr.ReadLine()) != null)
                {
                    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);
        }
В цикле while уже можно принимать какие-то действия по изменению текста?
Как в массив это все записать? или лучше в переменную типа string?

Последний раз редактировалось RIOs; 22.04.2012 в 19:21.
RIOs вне форума Ответить с цитированием
Старый 22.04.2012, 19:54   #4
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

Цитата:
В цикле while уже можно принимать какие-то действия по изменению текста?
да можно, но учитывая что readline считывает только строку, а не весь текст сразу изменять можно только это строку. (ну к примеру добавить какой нибудь символ)
Цитата:
Как в массив это все записать? или лучше в переменную типа string?
смотря что нужно ? если к примеру вы хотите работать с текстом целиком тогда лучше в переменную string если с отдельными элементами текста например с какими то словами в предложении то лучше массив.
wm_leviathan вне форума Ответить с цитированием
Старый 22.04.2012, 20:01   #5
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию

Всё. Уже разобрался.
Теперь появились другие вопросы.

Когда я считываю файл в строчку типа string. Русские буквы в консоли выводятся знаками вопроса, а английские буквы нормально. Методы ToUpper() и т.д работают.

Как сделать изменения в файле?


Вот как у меня получается, кому интересно.
Код:
try
            { 
                using (StreamReader sr = new StreamReader("test.txt"))
                {
                    String line;                    
                    while ((line = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                        foreach (char item in line)
                        {
                            string buf = item.ToString();
                            if (item.ToString().ToUpper() == buf) Console.Write(buf.ToLower()); else Console.Write(buf.ToUpper());
                        }
                    }
                }
            }
            catch (Exception e)
            {               
                Console.WriteLine("The file could not be read:");
                Console.WriteLine(e.Message);
            }
            Console.ReadKey();

Последний раз редактировалось RIOs; 22.04.2012 в 20:03.
RIOs вне форума Ответить с цитированием
Старый 22.04.2012, 20:33   #6
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

изменения не в файле надо а в кодировке. а лучше в кодировке при считывании
вот замени строку
Код:
using (StreamReader sr = new StreamReader("test.txt", Encoding.Default))
wm_leviathan вне форума Ответить с цитированием
Старый 22.04.2012, 20:39   #7
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию

Спасибо!
Только ты меня не до конца не много понял.
вот смотри.
С кодировкой ты подсказал, а я еще имел ввиду как сделать изменения в файле? ну т.е как ты видишь сам что делается в while, так вот изменения должны последовать и в текстовый файл.
RIOs вне форума Ответить с цитированием
Старый 22.04.2012, 20:49   #8
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

использовать StreamWriter
wm_leviathan вне форума Ответить с цитированием
Старый 22.04.2012, 21:14   #9
RIOs
Пользователь
 
Регистрация: 28.12.2011
Сообщений: 49
По умолчанию

Точно. спасибо!

А может ты знаешь, как подрубить любой другой файл, не находящийся в папке Студии?
RIOs вне форума Ответить с цитированием
Старый 22.04.2012, 21:14   #10
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

а и еще не пытайтесь делать в
Код:
while ((line = sr.ReadLine()) != null)
                    {
                        Console.WriteLine(line);
                        foreach (char item in line)
                        {
                            string buf = item.ToString();
                            if (item.ToString().ToUpper() == buf) Console.Write(buf.ToLower()); else Console.Write(buf.ToUpper());
                        }
                    }
запись в файл, не получится все равно ибо streamreader открывает поток и будет он открыт до тех пор пока не выйдете из программы или не закроете его sr.Close();
механика должна быть примерно следующая:
1) открываем файл для чтения и считываем текст из него
2) меняем текст на нужный нам (текст будет в буфере)
3)закрываем поток который открывали для чтения
4) открываем файл для записи и записываем в него из буфера
5) закрываем поток на запись
еще можно StreamReader.Dispose сделать он не закрывает файл, а только StreamReader, файл при этом остается открыт
wm_leviathan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение txt файла разделенного Tab'ом lex0rg C# (си шарп) 4 04.04.2012 15:48
Чтение данных из txt файла. werrey Общие вопросы Delphi 21 07.01.2012 11:56
Чтение данных из файла txt, язык C Sneeze Общие вопросы C/C++ 8 30.12.2011 14:34
if и чтение+вывод из файла .txt webber9989 PHP 4 24.08.2010 22:13
Чтение из TXT файла soonner Общие вопросы Delphi 1 14.03.2009 13:52