Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Zeilenangabe in txt Datei suchen.
Marcel99
myCSharp.de - Member



Dabei seit:
Beiträge: 1

Themenstarter:

Zeilenangabe in txt Datei suchen.

beantworten | zitieren | melden

Guten Tag, ich will ein Programm in Win. Forms erstellen, in welchen man eine Text Datei auswählen kann und nach Wörtern und Zeilen durchsuchen kann. Die Ausgabe soll den Zeileninhalt angeben in welchen das besagte Wort oder die Zeilenangabe drine steckt.
Bis jetzt habe ich es geschafft eine Text Datei auszuwählen und den Text nach Wörtern durchzusuchen, die der Text beinhaltet. Wo bei ich jetzt noch Hilfe bräuchte ist die Eingabe der Zeileneingabe.


public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        List<string> FileLines = new List<string>();
        List<int> iLineNumber = new List<int>();

        private void button1_Click(object sender, EventArgs e)
        {
            // Open a file dialog
            using (OpenFileDialog openDialog = new OpenFileDialog())
            {
                // Set the file dialog to show only *.txt file or all files
                openDialog.Filter = "Text files (*.txt)|*.txt|All Files (*.*)|*.*";

                // Allow only single file selection
                openDialog.Multiselect = false;

                // Make sure the user didn't clicked the 'Cancel' button
                if (openDialog.ShowDialog(this) == DialogResult.OK)
                {
                    // Update the current file label with the filename only (not the full path)
                    textBox1.Text = $"Current file: {Path.GetFileName(openDialog.FileName)}";

                    // Add each line of the txt file into the list
                    foreach (string line in File.ReadAllLines(openDialog.FileName, Encoding.UTF8))
                        FileLines.Add(line);
                }
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // Clear the list
            listView1.Items.Clear();

            // Count the number of line so you will be able to present it on the results list later on
            int iLineNumber = 1;

            // For each item in the 'FileLines' list
            foreach (var item in FileLines)
            {
                // Check whether the current line contains the term the user typed in the searchbox
                // I'm using 'ToLower()' to ignore case
                if (item.ToLower().Contains(textBox2.Text.ToLower()))
                {
                    // Create new ListViewItem to be added later on to the results list
                    // Add the first column the complete line that contains the term in the searchbox
                    ListViewItem lvi = new ListViewItem(item);

                    // Add the line number to the second column
                    lvi.SubItems.Add(iLineNumber.ToString());

                    // Add the ListviewItem to the results list
                    listView1.Items.Add(lvi);
                }

                // Increment the line number variable
                iLineNumber++;
            }
    }
Attachments
private Nachricht | Beiträge des Benutzers
inflames2k
myCSharp.de - Experte

Avatar #AARsmmPEUMee0tQa2JoB.png


Dabei seit:
Beiträge: 2357

beantworten | zitieren | melden

Verstehe ich das richtig, dass "nach Worten suchen" und "Zeile wählen" zwei getrennte Funktionalitäten sind?

Das wäre doch recht einfach machbar in dem du via Index auf deine Liste "FileLines" zugreifst. Oder verstehe ich an der Anforderung irgendwas falsch?
Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager | Spielkartenbibliothek
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1892
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Ein paar Anpassungen als Tipp.

1. Du kannst beim einlesen der Datei gleich alle Zeilen in die Liste mit AddRange einfügen.
2. Du hast eine Liste iLineNumber und eine lokale Variable mit dem selben Namen, solltest du wenn die Liste benötigt wird, umbenennen.
3. Du brauchst heute keinen Präfix wie bei der ungarischen Notation mehr, heutige IDEs zeigen dir die Typen an.
4. Es würde reichen, wenn du mit einer for Schleife deine FileLines Liste durchläufst, dann brauchst du keinen zusätzlichen Index.

T-Virus
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers