Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
1

Удаление строки из текстового файла

25.06.2015, 22:27. Просмотров 1909. Ответов 12
Метки нет (Все метки)

Здравствуйте, помогите исправить проблему, есть программа которая при запуске записывает данные в txt файл например dhfhhf:sds. Мне нужно чтобы при нажатии на Button2 программа нашла текст который идет после : из всех строку и удалила. Например: в тектовом файле есть строка с текстом sdaFHH:rer а программа из всех строк ищет :rer, если программа нашла ее то она полностю удаляет строку. Помогите пожалуйста ето сделать, буду очень благодарен.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2015, 22:27
Ответы с готовыми решениями:

Полное удаление строки текстового файла
Помогите кто знает, облазит уж точно половину C# Cyberфорума, ничего не нашел подомного имеется...

Удаление строки с номером k из текстового файла
Пожалуйста, помогите с задачей: "Дано число k и текстовый файл. Удалить из файла строку с номером...

Удаление ссылок из текстового файла
здравствуйте, возник такой вопрос как удалить с текстового файла все ссылки или заменить их,...

Удаление из текстового файла определённых строк
Вот написал код. Смысл его: нужно найти в текстовом файле определённое словосочетание. Если оно...

Поиск строки из текстового файла по слову из нее и запись всей найденной строки в переменную
Добрый день! Стоит задача. Необходимо по определенному слову найти строку в множестве строк...

12
Даценд
Модератор
Эксперт .NET
5144 / 4377 / 2827
Регистрация: 20.04.2015
Сообщений: 7,880
25.06.2015, 22:43 2
Иначе говоря, если я Вас правильно понял, нужно сделать так, чтобы среди строк файла не осталось строк с одинаковыми наборами букв после знака ':'?
Или же нужно удалить из всех строк файла фрагменты, начинающиеся со знака ':'?
0
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
25.06.2015, 22:50  [ТС] 3
Даценд, Да, Вы меня правильно поняли, нужно сделать так, чтобы среди строк файла не осталось строк с одинаковыми наборами букв после знака ':'.
0
Даценд
Модератор
Эксперт .NET
5144 / 4377 / 2827
Регистрация: 20.04.2015
Сообщений: 7,880
25.06.2015, 23:29 4
vlad_kostashuk,
как-то так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string path = "d:/1.txt"; //имя файла
string[] strings = File.ReadAllLines(path);
string[] strings2 = new string[1];
strings2[0] = strings[0];
for (int i = 1; i < strings.Length; i++)
{
    string rightPart = strings[i].Split(':')[1];
    bool isFounded = false;
    for (int j = 0; j < strings2.Length; j++)
    {
        string rightPart2 = strings2[j].Split(':')[1];
        if (string.Compare(rightPart, rightPart2) == 0)
            isFounded = true;
    }
    if (!isFounded)
    {
        Array.Resize(ref strings2, strings2.Length + 1);
        strings2[strings2.Length - 1] = strings[i];
    }
}
File.WriteAllLines(path, strings2);
0
25.06.2015, 23:29
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
26.06.2015, 16:34  [ТС] 5
Даценд, работает но не так как хотелось, подскажите а как сделать чтобы он искал текст после : , а если нашел то пусть удаляет всю строку.

Добавлено через 46 минут
Даценд, ??
0
Даценд
Модератор
Эксперт .NET
5144 / 4377 / 2827
Регистрация: 20.04.2015
Сообщений: 7,880
26.06.2015, 16:36 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

vlad_kostashuk,
так и работает.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string path = "d:/1.txt"; //имя файла
string[] strings = File.ReadAllLines(path); //читаем все строки в 1-й массив
string[] strings2 = new string[1]; //создаем 2-й массив
strings2[0] = strings[0]; //копируем первую строку первого массива во 2-й массив
for (int i = 1; i < strings.Length; i++) //перебираем строки первого массива
{
    string rightPart = strings[i].Split(':')[1]; //получаем фрагмент после : i-й строки 1-го массива
    bool isFounded = false; //отметка о том, что такой-же фрагмент после : во 2-м массиве не найден
    for (int j = 0; j < strings2.Length; j++) // перебираем строки второго массива
    {
        string rightPart2 = strings2[j].Split(':')[1]; //получаем фрагмент после : j-й строки 2-го массива
        if (string.Compare(rightPart, rightPart2) == 0) //если фрагменты одинаковые
            isFounded = true; //меняем отметку на "найдено"
    }
    if (!isFounded) //если не найдено
    {
        Array.Resize(ref strings2, strings2.Length + 1); //увеличиваем количество элементов 2-го массива на 1
        strings2[strings2.Length - 1] = strings[i]; //записываем последним элементом 2-го массива i-ю строку первого массива
    }
}
File.WriteAllLines(path, strings2); //записываем 2-й массив в файл
0
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
26.06.2015, 17:02 7
vlad_kostashuk,
C#
1
2
3
4
5
6
7
8
9
10
11
12
            String findingString = "ABCD";  // искомая часть строки
            List<String> newFile = new List<String>();  // сюда будем писать строки, в которых нет искомой части
            String[] currentFile = File.ReadAllLines("StringFile.txt"); // считываем все строки из файла
            String[] singleLine;    // здесь будут храниться части строки
            foreach (String line in currentFile)    // перебираем все считанные строки
            {
                singleLine = line.Split( ':' );    // разбиваем строку по символу ":"
                if (singleLine[1] == findingString) // смотрим соответствует ли вторая часть строки искомой
                    continue;  // если соответствует - переходим к следующей строке
                newFile.Add(line);  // если нет - добавляем строку в список для записи в файл
            }
            File.WriteAllLines("StringFile.txt", newFile.ToArray());    // когда все строки проверены - перезаписываем файл
1
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
26.06.2015, 17:55  [ТС] 8
Прошу закрыть тему. Проблема решена.
0
nikotinka
9 / 9 / 8
Регистрация: 13.06.2015
Сообщений: 45
26.06.2015, 18:17 9
Предлагаю такое решение, проверь, всё работает) Если решена, так решена, смотри сам.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            string filename = "myfile.txt";
            string[] strings = File.ReadAllLines(Environment.CurrentDirectory + @"\" + filename);
            for (int i = 0; i != strings.Length; i++)
            {
                string rightPart = strings[i].Split(':')[1];
                for (int j = i+1; j != strings.Length; j++)
                    if (rightPart == strings[j].Split(':')[1])
                    {
                        for (int k = j; k != strings.Length - 1; k++)
                        {
                            strings[k] = strings[k + 1];
                            strings[k + 1] = "";
                         
                        }
                        j--;
                        Array.Resize(ref strings, strings.Length - 1);
                    }
            }
            File.WriteAllLines(Environment.CurrentDirectory + @"\" + filename, strings);
0
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
26.06.2015, 19:08  [ТС] 10
aquaMakc, ошибка: клик
0
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
26.06.2015, 22:03 11
vlad_kostashuk, так и что за ошибка? где текст исключения?
0
vlad_kostashuk
0 / 0 / 0
Регистрация: 18.01.2015
Сообщений: 58
Завершенные тесты: 1
26.06.2015, 22:57  [ТС] 12
aquaMakc, Вот сведения:

C#
1
2
3
4
5
6
7
8
9
10
11
12
System.IndexOutOfRangeException не обработано
  HResult=-2146233080
  Message=Индекс находился вне границ массива.
  Source=serverExample
  StackTrace:
       в serverExample.Handle.ClientLeft(Client client) в c:\Users\влад\Desktop\тест\Source\Новая папка\Server\serverExample\Handle.cs:строка 91
       в serverExample.Program.ClientRead(Object client) в c:\Users\влад\Desktop\тест\Source\Новая папка\Server\serverExample\Program.cs:строка 171
       в System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       в System.Threading.ThreadHelper.ThreadStart(Object obj)
  InnerException:
Строки 71 нету вот строка 91
C#
1
 if (singleLine[1] == findingString) // смотрим соответствует ли вторая часть строки искомой
0
aquaMakc
481 / 394 / 68
Регистрация: 14.02.2014
Сообщений: 1,892
Завершенные тесты: 1
26.06.2015, 23:06 13
vlad_kostashuk, Message=Индекс находился вне границ массива.

вот ключевая фраза, значит в массиве singleLine нет элемента 1. Это может произойти, если ты split применил к строке, в которой нет разделителя, или она вообще пустая.
Проверяй свой текстовый файл.
Можешь ещё обвязать в try...catch. Например:
C#
1
2
3
4
5
6
7
8
9
try
{
   if (singleLine[1] == findingString) // смотрим соответствует ли вторая часть строки искомой
}
catch(Exception)
{
   Console.WriteLine("Bad line: " + line);
   return;
}
0
26.06.2015, 23:06
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2015, 23:06

Удаление строки из файла, добавление строки в конец файла
Подскажите : Как удалить строку в txt файле в которой имеется слово &quot;Zebra&quot;. А так же как...

Вывести строки текстового файла на экран
Дан тестовый файл . Вывести строки этого файла на экран

Консоль не читает строки из текстового файла
Добрый день! Консолька принимает на вход вопрос и ищет из текстового файла ответ, путем перебора...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.