Autor Beitrag
Syra
Hält's aus hier
Beiträge: 13

Windows 7 Ultimate x64
Visual C# 2010/Visual Studio 2012
BeitragVerfasst: Fr 01.11.13 21:41 
Nabend zusammen.

Ich bin grade mal wieder was am basteln aber komme absolut nicht weiter.

Ich habe einen Array in dem auf folgende weise etwas gespeichert ist :

Dateiname
Pfad
Dateiname
Pfad
Dateiname
Pfad


jetzt möchte ich diesen Array so aufteilen das es einen Array für den Dateinamen & einen für den Pfad gibt.

Es lässt sich leider nicht von vorneherein richtig aufsplitten, zumindest wüsste ich nicht wie.

Ich hoffe mir kann jemand helfen :)

Lg
Troubadix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: Fr 01.11.13 22:12 
Hallo Syra,

suchst du vielleicht so etwas?
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
            string[] gemischt = new string[100];
            string[] dateiname = new string[50];
            string[] pfad = new string[50];

            int j = 0;
            for (int i = 0; i <= 49; i++)
            {
                dateiname[i] = gemischt[j];
                j++;
                pfad[i] = gemischt[j];
                j++;
            }


Gruß
Troubadix
Syra Threadstarter
Hält's aus hier
Beiträge: 13

Windows 7 Ultimate x64
Visual C# 2010/Visual Studio 2012
BeitragVerfasst: Fr 01.11.13 22:28 
Genau das habe ich ebenfalls eben versucht, jedoch bekomm ich dann gesagt das ich einen int nicht in int[] umwandeln kann !?
Troubadix
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 28
Erhaltene Danke: 9

WIN 7
C# (VS2010 Express)
BeitragVerfasst: Fr 01.11.13 22:29 
Zeig mal deinen Code her. Bei mir kommt nämlich kein int[] vor.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 01.11.13 22:30 
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
string[] array = { "Dateiname ""Pfad ",
                   "Dateiname ""Pfad ",
                   "Dateiname ""Pfad " };

var filenames = array.Where((item, index) => index % 2 == 0);
var pathes = array.Where((item, index) => index % 2 == 1);



Äm wo bekommst du int's her?
Und warum legst du deine Daten erst in so einer merkwürdigen Art in einem Array ab?
Syra Threadstarter
Hält's aus hier
Beiträge: 13

Windows 7 Ultimate x64
Visual C# 2010/Visual Studio 2012
BeitragVerfasst: Fr 01.11.13 22:39 
Habe den Fehler gelöst, es funktioniert nun hervorragend dank deinem Code Troubadix.
Mein Fehler war ziemlich unnötig, da ich aus versehen ein paar Sachen vertauscht hatte.
Vielen dank :)

@Ralf Jansen

Ich wollte eine int Variable deklarieren der die Spalte im Array angibt, daher der int.
Dieses komische Ablegen entstand einen stringsplit.
Da in einer Datein "Name" < "pfad" angegeben wird, habe ich nach < gesplittet.

EDIT:

Aktuell habe ich jedoch noch ein Problem.

Ich habe einen Array in dem viele Namen enthalten sind.
Wenn ich nun in der ListBox einen dieser Namen auswähle soll er den Array via Array.BinarySearch durchgehen und mir den Index -1 ausgeben.
Jedoch gibt mir dieser BinarySearch negative werte an, obwohl die Namen definitiv un 100%ig im Array vorhanden sind.
Hier mein code:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
        public void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            object Transmitter = listBox1.SelectedItem;
            string Content;
            string[] DataArray;
            int ArrayPathIndexMinus1; //Gibt den Index des Pfades (ArraxIndex-1 = Path) an.
            string SelectedTransmitter = listBox1.SelectedItem.ToString();

            using (System.IO.StreamReader TransmitterFile = new StreamReader("C:\\Users\\XXXX\\Documents\\Visual Studio 2010\\Projects\\XXXX\\XXXXX\\XXXXX.txt"))
            {
                Content = TransmitterFile.ReadToEnd(); //Liest die Komplette Textdatei aus
                DataArray = Content.Split('<'); //Splittet die Datei in einen Array. Grade Zahlen = Dateipfad, ungrade + 0 = Name des Senders.
            }

            ArrayPathIndexMinus1 = Array.BinarySearch(DataArray,SelectedTransmitter);
            MessageBox.Show(Convert.ToString(ArrayPathIndexMinus1 - 1));
        }


Moderiert von user profile iconTh69: Quote entfernt.


Zuletzt bearbeitet von Syra am So 03.11.13 23:25, insgesamt 1-mal bearbeitet
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 04.11.13 00:30 
Ein binäre Suche funktioniert nur bei einer sortierten Liste. In einem unsortierten Haufen kannst du nur durch alle Elemente iterieren und solange vergleichen bist du einen Treffer hast. Am einfachsten per Linq

ausblenden C#-Quelltext
1:
2:
3:
var result =  DataArray.FirstOrDefault(x=> x == SelectedTransmitter);
if(result != null)
    // .. mach was
Palladin007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1282
Erhaltene Danke: 182

Windows 11 x64 Pro
C# (Visual Studio Preview)
BeitragVerfasst: Mo 04.11.13 01:10 
Nochmal auf dein ursprüngliches Problem zurück, was hältst du davon:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
string filePath = "C:\\Users\\XXXX\\Documents\\Visual Studio 2010\\Projects\\XXXX\\XXXXX\\XXXXX.txt";

foreach (var line in File.ReadAllLines(filePath))
{
    string[] lineParts = line.Split('<');

    if (lineParts.Length == 2)
    {
        string transmitterName = lineParts[0];
        string transmitterPath = lineParts[1];

        // Tue etwas mit den Daten
    }
    else
    {
        // Tue etwas mit der Zeile, die eventuell fehlerhaft ist
    }
}


So musst du gar nicht erst groß mit seltsamen Array-Funktionen rum spielen, sondern kannst die Daten direkt verarbeiten.




Zu zweiten Frage:

Die Methode "FirstOrDefault", wie Ralf Jansen schon gezeigt hat, ist die beste mir bekannte Möglichkeit, um irgendeinen Wert anhand irgendwelcher Vergleichs-Daten aus einer Liste zu ziehen.
Oder du verwendest "First", was aber eine Exception wirft, wenn kein Element gefunden wurde. In der Regel bietet sich aber FirstOrDefault und eine nachträgliche Überprüfung an, wie ja schon gezeigt.

Wenn du mehrere Ergebnisse haben möchtest, dann wähle die Methode "Where", die du auf gleiche Weise verwendest, die "First" und "FirstOrDefault".

Allgemein kannst du dir mal die LINQ-Methoden(diese drei Methoden gehören nämlich dazu) anschauen, dann gerade im Umgang mit Auflistungen von Daten findest du da sehr nützliche Methoden. Dort wirst du aber besonders die Lambda-Ausdrücke benötigen, da die meisten LINQ-Methoden Funktionen (Func) erwarten und da bieten sich Lambda-Ausdrücke einfach sehr gut an.