Wie schreibe ich nur jede ungerade Zeile in mein Array rein (C#)?

1 Antwort

Ich habe die Frage nicht ganz verstande. Du willst aus einer Datei die ungeraden Zahlen auslesen und einspeicher richtig? Wenn ja könntest du es mit diesem code versuchen:

string[] lines = File.ReadAllLines("file.txt");
string[] oddLines = new string[lines.Length / 2];
         int j = 0;
         for (int i = 0; i < lines.Length; i++)
         {
           if (i % 2 != 0) 
           {
             oddLines[j] = lines[i];
             j++;
           }
         }

Dabei nicht vergessen, die oddLines mit einer schleife auszugeben

Strohhut1998 
Fragesteller
 14.01.2023, 16:10

Ne Ne ich mochte jede Zeile mit einem x Wert in Array1 und jede Zeile mit einem y Wert in Array 2 speichern.

0
nail745  14.01.2023, 16:20
@Strohhut1998
string[] lines = File.ReadAllLines("yourfile.txt");
        double[] xValues = new double[lines.Length];
        double[] yValues = new double[lines.Length];

        for (int i = 0; i < lines.Length; i++)
        {
            string[] parts = lines[i].Split(',');
            if (parts[1].StartsWith("x"))
            {
                xValues[i] = Convert.ToDouble(parts[0]);
            }
            else if (parts[1].StartsWith("y"))
            {
                yValues[i] = Convert.ToDouble(parts[0]);
            }
        }

So eventuell, wenn ich die Frage richtig verstanden haben sollte?

0
Strohhut1998 
Fragesteller
 14.01.2023, 16:32
@nail745

Ja so ungefähr. Würde das denn alle 20 Werte in die Arrays schreiben?

Würde das Split(' , ') nicht heißen, dass er die Nachkommastellen voneinander trennet?

Kann ich auch den Zähler der for Schleife prüfen, ob er gerade oder ungerade ist?

if(i = odd) oder if(i % 2 != 0) z. B.?

0
Strohhut1998 
Fragesteller
 14.01.2023, 16:43
@nail745

FileStream fs = new FileStream ("FileName.txt", FileMode.Open);

StreamReader sr = new StreamReader (fs);

double[] xValues = new double[10];

double[] yValues = new double[10];

for (int i = 0; i < lines.Length; i++)

{

if ( i % 2 != 0)

{

xValues[i] = (StreamReader(fs).Value); // macht sowas Sinn oder Brauche ich hier ein String Array um die werte erstmal da reinzuschreiben?

}

else if (i % 2 = 0)

{

yValues[i] =(StreamReader(fs).Value) ;

}

}

Was ich noch nicht weiß, ist wie ich die Daten aus dem Streamreader in doubles umwandle und ob der Streamreader gerade überhaupt Zeile für Zeile durchgeht. Muss ich dafür nicht den StreamReader in die for Schleife packen und dann sowas wie Newline oder so hinzufügen?

0
nail745  14.01.2023, 16:44
@Strohhut1998

Stimmt habe es missverstanden. ersetze Split(' , ') mit einem Split(' ') dann sollte es klappen.

Zu der frage mit if(i = odd) oder if(i % 2 != 0), dass könntest du in der for-schleife noch ergänzen.

1
regex9  14.01.2023, 16:48
@nail745

Das Dateiformat ist nach Angaben des FS anders.

Eine Zeile kann so aussehen:

4,436 y2

Das heißt, das Trennzeichen zum Splitten wäre ein Leerzeichen und den numerischen Wert sollte man besser parsen (s. double.Parse).

Da die Zeilenanzahl nicht mehr direkt auf einen un-/geraden Eintrag verweist, müsste man sich entweder eine mathematische Formel zur Berechnung bilden oder einfacher, man setzt eine zusätzliche Zählervariable hinzu, die immer nur jede zweite Zeile inkrementiert wird.

1
nail745  14.01.2023, 16:50
@Strohhut1998
string[] lines = File.ReadAllLines("yourfile.txt");
double[] xValues = new double[lines.Length];
double[] yValues = new double[lines.Length];

for (int i = 0; i < lines.Length; i++)
{
    string[] parts = lines[i].Split(' ');
    double value = Convert.ToDouble(parts[0]);
    if (value % 2 != 0)
    {
        if (parts[1].StartsWith("x"))
        {
            xValues[i] = value;
        }
        else if (parts[1].StartsWith("y"))
        {
            yValues[i] = value;
        }
    }
}

Meinst du sowas?

0