Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считать последнюю строку, из txt файла 
V
    Опции темы
ДобренькийПапаша
Дата 6.5.2010, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Сабж. Как сделать это быстро? Не пробегая весь текст. Так можно установить указатель на конец файла. Но как дальше всё равно не понимаю.


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
ForveAvar
Дата 6.5.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 6.8.2009

Репутация: нет
Всего: 1



ну можно выполнить команду str = str.Substring (strartIndex, Length) где
strartIndex = str.LastIndexOf ("\ r \ n")
Length = str.Length - str.LastIndexOf ("\ r \ n")
кажется так ..... там уже в цифрами нужно смотреть, гдето там добавить, гдето отнять
PM MAIL   Вверх
ДобренькийПапаша
Дата 6.5.2010, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



В вашем варианте нужен по крайней мере один полный проход по файлу. Чтобы взять substring нужна строка, откуда она у вас берётся - непонятно.

Вот так ставлю указатель на конец файла. А как дальше?
Код

string str = "";
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            fs.Seek(0, SeekOrigin.End);
            StreamReader sr = new StreamReader(fs);




Это сообщение отредактировал(а) ДобренькийПапаша - 6.5.2010, 12:55


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
mrbrooks
Дата 6.5.2010, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Код

                
                    StringBuilder str = new StringBuilder(); 

                    using (BinaryReader read = new BinaryReader(File.OpenRead(fileName)))
                    {
                        char ch;
                        read.BaseStream.Position = read.BaseStream.Length-1;
                        while ((ch = (char)read.PeekChar()) != '\n')
                        {
                            str.Append(ch);
                            read.BaseStream.Position--;
                        }
                    }
                    
                    MessageBox.Show(str.ToString());

PM MAIL   Вверх
A5uKa
Дата 6.5.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 3
Всего: 16



Код

 class LineCounterWithoutLoop
 {
   public static Main () : void
   {
     def sr = System.IO.StreamReader ("SomeFile.txt");
     mutable line_no = 0;
 
     def read_lines () : void {            
       def line = sr.ReadLine ();
       when (line != null) {               
         line_no = line_no + 1;          
         read_lines ()                    
       }
     };
 
     read_lines ();      
 
     System.Console.WriteLine (line_no);
   }
 }

PM   Вверх
ДобренькийПапаша
Дата 6.5.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

Репутация: 3
Всего: 7



Вставил ваш код (без всяких FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);fs.Seek(0, SeekOrigin.End);). Пустая строка на выходе(((
Код

public static string ReadLastLine(string file)
        {
            StringBuilder str = new StringBuilder();
            using (BinaryReader read = new BinaryReader(File.OpenRead(file)))
            {
                char ch;
                read.BaseStream.Position = read.BaseStream.Length - 1;
                while ((ch = (char)read.PeekChar()) != '\n')
                {
                    str.Append(ch);
                    read.BaseStream.Position--;
                }
            }
        }





--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
mrbrooks
Дата 6.5.2010, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 17
Всего: 306



Цитата(ДобренькийПапаша @  6.5.2010,  17:26 Найти цитируемый пост)
Пустая строка на выходе(((

Скорее всего последняя строка в файле пустая. Типа этого:
Цитата

//здесь четыре строки
трололо
трололо
трололо



Цитата

//здесь три строки
трололо
трололо
трололо


Проверить можно в любом текстовом редакторе. 
Выйти из ситуации можно так:
Код

            StringBuilder str = new StringBuilder();
            using (BinaryReader read = new BinaryReader(File.OpenRead(fileName)))
            {
                char ch;
                read.BaseStream.Position = read.BaseStream.Length - 1;
                while (read.BaseStream.Position != 0)
                {
                    ch = (char)read.PeekChar();
                    if (ch != '\n') str.Append(ch);
                    else if (str.Length != 0) break;
                    read.BaseStream.Position--;
                }
            }



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0494 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.