Member 13366011 Ответов: 2

Проверьте, есть ли дубликаты в TXT-файлах с помощью C#


Всем привет,

Я пытаюсь создать код C#, который узнает, находится ли ввод из поля textbox уже в TXT-файле.
В настоящее время у меня есть приведенный ниже код для хранения входных данных из текстового поля.

Что мне нужно, так это чек, который проходит через TextSA.txt файл и только проверяет наличие ChildOrderInput.Текст и если он уже существует в этом TXT-файле. Дата и OrderInputText должны быть проигнорированы в этой проверке.

File.AppendAllText("textSA.txt", DateTime.Now.ToString("dd-MM-yyyy") + OrderInputText + " " + ChildOrderInput.Text + "\n" + Environment.NewLine); }

У вас, ребята, есть какие-нибудь идеи, как это сделать?

Кроме того, если проверка находит дубликат, она должна выдать ошибку пользователю, который ChildorderInput.Текст уже находится в файле,а затем отправьте дату и время.Теперь вернемся к пользователю.

Надеюсь, кто-нибудь сможет мне помочь!

Спасибо!

гртц Роберт

Что я уже пробовал:

File.AppendAllText("textSA.txt", DateTime.Now.ToString("dd-MM-yyyy") + OrderInputText + " " + ChildOrderInput.Text + "\n" + Environment.NewLine); }

PIEBALDconsult

Это почти CSV, так почему бы не использовать CSV, а затем получить доступ к нему, как к базе данных?

BillWoodruff

В то время как у вас есть два твердых ответа на ваш вопрос ... в буквальном смысле ... теперь я задаюсь вопросом, почему вы используете чтение/запись файла для этого ... "дорогостоящего" процесса.

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

2 Ответов

Рейтинг:
16

OriginalGriff

Попробуй:

string strTheFile = File.ReadAllText(@"D:\Test Data\textSA.txt");
if (strTheFile.Contains(ChildOrderInput.Text))
    {
    Console.WriteLine("Found!");
    }


Рейтинг:
12

Thomas Daniels

Вы можете сделать это:


  1. Прочтите файл построчно.
  2. Для каждого файла:

    1. Разделить на две части " " и возьмем вторую часть. Это дает вам ранее сохраненный ChildOrderInput. Примечание: это не сработает, поскольку OrderInputText может содержать пробелы; потому что, если это возможно, пробел не является четким разделителем для OrderInputText и ChildOrderInput.Text. Поэтому, если OrderInputText может содержать пробелы, используйте другой разделитель, чем " ".
    2. Если сохраненный ChildOrderInput равен текущему, разорвите цикл и покажите ошибку.

(Кстати, я не вижу смысла в этом "\n" + Environment.NewLine - если вы хотите две новые строки, вам лучше использовать Environment.NewLine + Environment.NewLine)
bool displayError = false;
using (StreamReader sr = new StreamReader("textSA.txt"))
{
    while (sr.Peek() > -1)
    {
        string line = sr.ReadLine();
        if (!string.IsNullOrWhiteSpace(line))
        {
            string parts = line.Split(new char[] { ' ' }, 2);
            if (parts.Length < 2) { /* the line isn't in the correct format; handle it correctly if it can happen */ }

            string previousChildOrderInput = parts[1];
            if (previousChildOrderInput.Equals(ChildOrderInput.Text))
            {
                displayError = true;
                break;
            }
        }
    }
}
if (displayError)
{
    // display error

    // Displaying it here rather than inside the loop makes sure that the file is already closed before the error message is displayed.
}