Laden...

Foreach-Schleife mit Zufallswert funktioniert im Debugger-Einzelschritt, sonst aber nicht?

Erstellt von nash128 vor 5 Jahren Letzter Beitrag vor 5 Jahren 684 Views
N
nash128 Themenstarter:in
3 Beiträge seit 2019
vor 5 Jahren
Foreach-Schleife mit Zufallswert funktioniert im Debugger-Einzelschritt, sonst aber nicht?

Hallo liebe Forengemeinde,

ich habe (als C#-Anfänger) die Aufgabe ein kleines simples Programm zu schreiben, welches Datenzeilen aus einer TXT-Datei ausliest, dann in ein Array ablegt und aus diesem eine bestimmte Anzahl zufälliger Werte zieht, diese dann in ein zweites Array speichert, um sie schließlich in eine neue TXT-Datei zu schreiben und zu speichern.
Dabei sollten keine doppelten Werte in der finalen Datei stehen. An der Dopplungsvermeidung bin ich allerdings noch nicht dran, jedoch für Tipps dankbar.. 😉

Der Grund dieses Threads, der mich zum verzweifeln bringt ist, dass der Code, wenn ich ihn im Debugging-Modus im Einzelschritt durchgehe, funktioniert. Die Daten können eingelesen werden, die Arrays werden befüllt, die Auswahl klappt und die Textdatei wird Zeile für Zeile korrekt mit unterschiedlichen Werten beschrieben. Jetzt kommts:
Wenn ich allerdings keine Haltepunkte setze und das Programm einfach laufen lasse, schreibt er die gewünschte Anzahl an Einträgen in die finale TXT-Datei, jedoch immer den gleichen Wert.

Bsp.: Sourcedatei enthält Zeilen von 1 bis 400 und es sollen 20 Werte ausgesucht werden.

Bei Debugger im Einzelschritt ist das Ergebnis 21, 75, 24, 98, ... .
Bei normalem Ablauf ist das Ergebnis 19, 19, 19, 19, 19, ... .

Da stehe ich vor einem Rätsel 😦

Hier mein Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

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

        public string[] datapool; //Hier werden die Werte der Source-Datei reingelesen
        public string sourcepath;
        public string destinationpath;

        private void button3_Click(object sender, EventArgs e) //Sourcedatei auswählen
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.Filter = "TXT-Datei (*.txt)|*.txt";
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.pathlabel.Text = openFileDialog1.FileName;
                sourcepath = openFileDialog1.FileName;
            }
        }

        private void button4_Click(object sender, EventArgs e) //Sourcedaten einlesen
        {
            if (File.Exists(sourcepath))
            {
                datapool = File.ReadAllLines(sourcepath, Encoding.UTF8);
                string datalength = datapool.Length.ToString();
                lbl_datacount.Text = datalength + " Datensätze erfolgreich eingelesen.";
            }
        }

        private void button2_Click(object sender, EventArgs e) //Zieldatei auswählen
        {
            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
            saveFileDialog1.FileName = "Stichprobenliste.txt";
            saveFileDialog1.Filter = "TXT-Datei|*.txt";

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.destpathlabel.Text = saveFileDialog1.FileName;
                destinationpath = saveFileDialog1.FileName;
            }
        }

        private void button1_Click(object sender, EventArgs e) //Anstoß zum Generieren
        {
            int choosemax; //Benutzereingabe für Anzahl Werteauswahl
            

            if (int.TryParse(textBox2.Text, out choosemax)) 
            {
                string[] selection = new string[choosemax];

                for (int i = 0; i < choosemax; i++)
                {
                    Random rnd = new Random(); //Zufallsauswahl aus Array
                    string export = datapool[rnd.Next(0, datapool.Length)];
                    selection[i] = export; //Schreiben in Zielarray
                }

                StreamWriter sr = new StreamWriter(destinationpath, true);
                foreach (string doc in selection) //Schreiben aus Zielarray in TXT
                {
                    sr.WriteLine(doc);
                }
                sr.Close(); 
                    
            }

        }
    }
}


Ich hoffe, dass ich im Forum keinen Hilfreichen Hinweis zu meinem Problem übersehen habe. Wenn doch, bitte ich um Entschuldigung.

Vielen Dank im Voraus für Eure Hilfe!

lg nash

5.657 Beiträge seit 2006
vor 5 Jahren

Weeks of programming can save you hours of planning