Как удалить конкретную строку в текстовом файле? - PullRequest
0 голосов
/ 05 июня 2011

У меня маленькая проблема. Позвольте мне объяснить рабочее место.

Структура моего текстового файла: X_OFFSET 0 Y_OFFSET 0 IDSTART 0001 222 222 222 222 0002 250 500 250 0003 1700 500 500 250 0004 900 600 500 250 0005 1350 250 500 250 IDEND

Что мне нужно сделать, так это найти блок IDSTART-IDEND и УДАЛИТЬ специальную строку между ними.

Пример: пользовательский набор id1 123 124 125 126 => id1 означает идентификатор, 123 означает центр X, 124 означает центр Y, 125 означает центр Z и 126 означает радиус.

Место работы: Пользователь вводит номер идентификатора (например, id5) в текстовое поле, затем нажимает кнопку, чтобы удалить всю строку, начинающуюся с «id5» ...

это возможно? если это так, как я могу это сделать?

[Improved_v2]

Окей, я внес некоторые изменения, и теперь это работает. Но есть проблема.

FileStream fs = new FileStream ("C: \ hucre.txt", FileMode.Open); StreamReader okuma = новый StreamReader (фс); строка Metin = okuma.ReadToEnd (); char [] Ayrac = {'\ n'}; MetinSplit = Metin.Split (Ayrac);

    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi.Add("a");
        GeciciDizi2.Add("b");
    }
    // MetinSplit'i GeciciDiziye At.
    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi[i] = MetinSplit[i];
    }

    for (int i = 0; i < MetinSplit.Length; i++)
    {
        GeciciDizi2[i] = MetinSplit[i];
    }

    for (int i = 0; i < GeciciDizi.Count; i++)
    {
        if((string)GeciciDizi[i]==SilinecekDeger)
            GeciciDizi.RemoveAt(i);
    }
    for (int i = 0; i < GeciciDizi.Count; i++)
    {
        GeciciDizi2[i] = GeciciDizi[i];
    }

    okuma.Close(); 
    fs.Close();
    FileStream newFile = new FileStream("C:\\hucretemp.txt",      FileMode.Open);

    StreamWriter yaz = new StreamWriter(newFile);
    for (int i = 0; i < GeciciDizi2.Count; i++)
    {
        yaz.WriteLine(GeciciDizi2[i]);
    }

    yaz.Close();
    yeniFile.Close();
    File.Delete("C:\\hucre.txt");

    File.Move(@"C:\\hucretemp.txt",   @"C:\\hucre.txt");
}

}

Здесь проблема в следующем.

Когда я читаю из файла hucre.txt в свой tempArrayList, он записывается в массив, как показано ниже.

X_OFFSET 0 \ r \ n Y_OFFSET 0 \ r \ n IDSTART \ г \ п 0001 222 222 222 222 \ r \ n 0002 250 500 250 0003 1700 500 500 250 0004 900 600 500 250 0005 1350 250 500 250 IDEND

добавляет еще один \ r.

Итак, когда я хочу прочитать что-то из "hucre.txt", Я не могу это сделать, потому что это становится таким 0001 222 222 222 222 * \ r \ r \ n *

Как я могу удалить это?

Я действительно в отчаянии, пожалуйста, помогите: /

Мои наилучшие пожелания ...

1 Ответ

2 голосов
/ 05 июня 2011

Я не прочитал весь ваш код, но ваша логика ввода-вывода слишком сложна и неэффективна.

Основная идея:

using (var reader = File.OpenText(orgFileName))
using (var writer = File.CreateText(tmpFileName))
{
    while (true)
    {
       string line = reader.ReadLine();
       if (line == null)
         break; // done

       // logic to analyze / track content

       if ( Is_special_line)
       {
          // do something, or maybe nothing (skip)
       }
       else
       {
          writer.WriteLine(line);
       }
    }
}

File.Delete(orgFilename);
File.Rename(tmpFilename, orgFilename);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...