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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2010, 11:54   #1
Iv@n
 
Регистрация: 18.02.2010
Сообщений: 8
Счастье Про простые алгоритмы... или нет? Удаление из List<>

Нужно аккуратно так удалить абзац из файла. В нем есть пустые строки (образованные однократным нажатием Enter). Абзац выделяется Табуляцией. Решил из файла в коллекцию List<string>, в ней удалить, а пото обратно в файл. Только, либо не думается, либо последствия глобального кризиса...

В общем вот:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;

namespace File_RW
{
    class Class1
    {
        public static void Main(String[] args)
        {
            //из файла в коллекцию
            string FName = @"C:\text.txt";
            List<string> file = File.ReadAllLines(FName).ToList();
            int inc = 0;//просто счетчик абзацев
            foreach (string i in file)
            {
                foreach (char t in i)//это для нахождения табуляции
                {
                    if (t == (char)ConsoleKey.Tab)
                    { Console.Write(++inc); }
                }
                Console.WriteLine(i);
            }
            //удаление
            try //это просто чтоб не выскакивало что попало :)
            { 
                Console.WriteLine("Какой абзац удалить?"); 
                int buf = Convert.ToInt32(Console.ReadLine());
                int ins = 0;
                int k = 0;//счетчик строк
                foreach (string i in file)
                {
                    ++k;
                    foreach (char t in i)
                    {
                        if (t == (char)ConsoleKey.Tab) { ++ins; }//считаем Таb
                        //если попадается нужный по счету "Таb" то удаляем строку с номером k
                        //пока не встретит другой Таb или Ентеr
                        if ((ins == buf)&&(t != (char)ConsoleKey.Enter))
                        {
                            file.RemoveAt(k-1);
                        }
                    }
                }
            }
            catch { Console.WriteLine("???"); }
            int ink = 0;
            foreach (string i in file)//выводим то что получилось
            {
                foreach (char t in i)
                {
                    if (t == (char)ConsoleKey.Tab)
                    { Console.Write(++ink); }
                }
                Console.WriteLine(i);
            }
            Console.ReadLine();
        }
    }
}
Потом я результат в файл запихаю. Дело в том что он всё остальное после нужного абзаца удаляет. Требуется мысль!!! ...своих не хватает
Iv@n вне форума Ответить с цитированием
Старый 30.04.2010, 12:35   #2
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Мне кажется проще было бы использовать команду Split.
Т.е. записываешь весь текст из файла в string. Делаешь:
Код:
string[] abzac = myFile.Split('\t');
Потом вводишь номер ненужного абзаца и
Код:
for (int i=0; i<abzac.Length; i++)
{
if (i == buf)
continue;
// тут пишешь в файл
}
Hollander вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Правда или нет? profi Свободное общение 13 27.01.2010 08:39
Правильно или нет вот в чём вопрос но ошибок нет... Alexcool Помощь студентам 2 10.01.2010 13:55
vector, list или multimap. Помогите, пожалуйста, класс выбрать! Pahan Общие вопросы C/C++ 0 13.12.2009 12:54
Лицензионное ПО или нет? pures Свободное общение 1 02.12.2007 06:34