C # Удалить строку из расширения .txt с изменением имени файла - PullRequest
0 голосов
/ 31 мая 2018

В настоящее время я пытаюсь создать .exe в c #, на который я могу перетащить файл .txt, чтобы удалить строки текста, содержащие ключевые слова «CM» и / или «Filling».Он должен иметь возможность перезаписывать существующие данные, чтобы новые файлы не создавались.Имя файла меняется каждый раз, кроме расширения.Данные разделены табуляцией, если это имеет какое-либо отношение.Я знаю, что есть похожие вопросы, но мне не удалось адаптировать их к моим потребностям.Кроме того, я очень новичок в этом, и я пытался около недели без удачи.

            if (args.Length == 0)
            return; // return if no file was dragged onto exe
        string text = File.ReadAllText("*.txt");
        text = text.Replace("cm", "");
        string path = Path.GetDirectoryName(args[0])
            + Path.DirectorySeparatorChar
            + Path.GetFileNameWithoutExtension(args[0])
            + "_unwrapped" + Path.GetExtension(args[0]);
        File.WriteAllText("*.txt", text);

\\attempt 1

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            string concrete = "CM";
            string line;

            using (StreamReader reader = new StreamReader(@"C:\\Users\drocc_000\Desktop\1611AN24T99-041805221704.txt"))
            {
                using (StreamWriter writer = new StreamWriter(@"C:\\Users\drocc_000\Desktop\1611AN24T99-041805221704NEW.txt"))
                {
                    while ((line = reader.ReadLine()) != null)
                    {
                        // if (String.Compare(line, yourName) == 0)
                        //    continue;

                        writer.WriteLine(line.Replace(concrete, ""));
                    }
                }
            }
\\attempt 2

Спасибо за ваше время.С уважением, Дэнни

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Как то так?

using System;
using System.IO;
using System.Linq;

namespace ConsoleApp1
{
    internal static class Program
    {
        private static void Main(string[] args)
        {
            try
            {
                // Get the filename from the applications arguments
                string filename = args[0];

                // Read in all lines in the file.
                var linesInFile = File.ReadLines(filename);

                // Filter out the lines we don't need.
                var linesToKeep = linesInFile.Where(line => !line.Contains("CM") && !line.Contains("Filling")).ToArray();

                // Overwrite the file.
                File.WriteAllLines(filename, linesToKeep);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}
0 голосов
/ 31 мая 2018

Вы можете создать консольное приложение с приведенным ниже кодом, а затем перетащить текстовый файл в файл .exe, не открывая его.

class Program
{
    static void Main(string[] args)
    {
        if (args.Length > 0 && File.Exists(args[0]))
        {
            string path = args[0];
            EditFile(new List<string>() { "CM", "Filling" }, path);
        }
        Console.Read();
    }

    public static void EditFile(List<string> keyWords, string filename)
    {
        List<string> lines = new List<string>();

        using (StreamReader sr = new StreamReader(filename))
        {
            while (sr.Peek() >= 0)
            {
                lines.Add(sr.ReadLine());
            }
            sr.Close();
        }

        int removedLinesCount = 0;
        bool writeline;
        using (StreamWriter sw = new StreamWriter(filename))
        {
            foreach (var line in lines)
            {
                writeline = true;
                foreach (var str in keyWords)
                {
                    if (line.Contains(str))
                    {
                        writeline = false;
                        removedLinesCount++;
                        break;
                    }
                }

                if (writeline)
                    sw.WriteLine(line);
            }

            Console.WriteLine(removedLinesCount + " lines removed from the file " + filename);
            sw.Close();
        }
    }
}
...