Announcement

Collapse
No announcement yet.

Dateiname aus String ermitteln

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dateiname aus String ermitteln

    [edit=gfoidl] Hab den Titel von "String mit variabler Länge bearbeiten" auf "Dateiname aus String ermitteln" geändert [/edit]

    hi@all
    ich bin zimlich vb.net Neuling und lerne dies grad im Studium.
    Hier meine Frage:

    ich habe in einer StringCollection viele Pfade der Art:
    "C:\wwwww\xxx\yyyy\zzz\test.scr"

    wobei der Pfad und der Dateiname von unbestimmter Länge ist.
    Nun möchte ich diesen String so bearbeiten, dass am Ende nur noch dasteht:
    "test"
    ich suche also ansich nur eine Funktion, welche mir den Text ab dem letzten "\" wiedergibt.

    vielen Dank schonmal für eure Hilfe,

    Chris
    Zuletzt editiert von gfoidl; 30.07.2009, 09:07.

  • #2
    Hallo und willkommen,

    Methoden zum Verarbeiten von Dateien und Pfaden findet man in den Klassen File, Path, Directory sowie ggf. in FileInfo, DirectoryInfo. Insbesondere gibt es eine Methode GetFileNameWithoutExtension; nun musst du nur noch in der SDK-Doku/MSDN (vorzugsweise im Index) blättern, wo genau das zu finden ist.

    Diese Methode musst du dann für alle Elemente deiner Collection benutzen.

    Gruß Jürgen

    Comment


    • #3
      danke Jürgen
      nur, dass ich das nicht so machen kann, da ich diese adressen in einer
      string collection hab.. das kann ich leider auch ned verändern

      ich hab es jetzt etwas anfängerhaft gelöst, aber es funktioniert:

      Code:
                          For i=0 to x Step 1
                          Dim arrFiles As Array
                          Dim arrLength As Integer
      
                          arrFiles = files(i).Split("\"c, "."c)
                          arrLength = arrFiles.Length
      
                          wrtxt.Write(arrFiles(arrLength - 2))
                          Next
      wobei files() dieser stringcollector ist


      wenn jmd noch eine bessere idee hat, nur her damit

      lg Chris

      Comment


      • #4
        Hallo,

        ich würde auf die StringCollection pfeifen und stattdessen ein generische Liste verwenden. Mit diesen hast du viel mehr Flexibilität.

        In Kombination mit LINQ verkürzt sich deine Aufgabe dann zu
        [highlight=vbnet]
        Dim fileNames As New List(Of String)()
        fileNames.Add("C:\wwwww\xxx\yyyy\zzz\test.scr")
        ...

        Dim fileName = From s In fileNames _
        * * Select Path.GetFileNameWithoutExtension(s)
        [/highlight]


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hallo Chris,

          ob du einen einzelnen String oder ein Element aus einer StringCollection oder einem Array hast, ist doch gleichgültig.
          [highlight=vbnet]Dim shortfilename As String
          shortfilename = Path.GetFileNameWithoutExtension("C:\wwwww\xxx\yyy y\zzz\test.scr")
          // oder mit einer Schleife wie in deinem Beispiel
          For i=0 to x Step 1
          wrtxt.Write( Path.GetFileNameWithoutExtension(files(i)) )
          Next[/highlight]

          Gruß Jürgen

          @Gü
          Du hast zwar recht mit dem allgemeinen Hinweis. Mir kommt es aber so vor, als ob die StringCollection nichts anderes ist als ein Vorgriff auf List<string>.

          Comment


          • #6
            hey, ich danke euch beiden
            klappt jetzt perfekt

            lg chris

            Comment


            • #7
              @Gü
              Du hast zwar recht mit dem allgemeinen Hinweis. Mir kommt es aber so vor, als ob die StringCollection nichts anderes ist als ein Vorgriff auf List<string>.
              Insofern hast du Recht.

              Der Nachteil der StringCollection (und den anderen nicht-generischen Auflistungen) ist dass die generischen Schnittstellen (logischerweise) nicht implementiert sind und daher zB LINQ nicht möglich ist denn diese benötigen die generischen Schnittstellen (wie IList<T>).


              mfG Gü
              "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

              Comment


              • #8
                Vielleicht hab ich was verpasst, aber wieso nimmst du dir nicht einfach deinen String und suchst nach dem letzten Vorkommen von "\" und machst an dieser Position ein Split oder Right?
                Wäre das nicht die simpelste Lösung?

                Comment


                • #9
                  Wäre das nicht die simpelste Lösung?
                  Genau das macht Path.GetFileNameWithoutExtension. Was kann einfacher sein als fertigen getesten Code zu nehmen als den selber nachzuschreiben? Insbesondere weil GetFileNameWithoutExtension bestimmt noch ein paar Randbedingungen mit prüft die man selbst mal schnell übersieht.

                  Comment


                  • #10
                    Originally posted by Andreas Mahr View Post
                    Wäre das nicht die simpelste Lösung?
                    Theoretisch vielleicht. Aber er will den Dateinamen ohne die Extension. Also muss er auch noch nach dem letzten Punkt suchen und eine Fallunterscheidung machen, ob es vielleicht ein Dateiname ohne Extension ist und ob vielleicht ein Punkt im Dateinamen enthalten ist und was weiß ich noch alles. Die von Gü und mir empfohlene Methode berücksichtigt all das.

                    Also warum soll man etwas selbst schreiben (und sei es noch so simpel), was im Framework fertig vorliegt?

                    Jürgen

                    /Edit
                    Ralf war etwas schneller. Zwei gleiche Meinungen überzeugen hoffentlich.

                    Comment


                    • #11
                      ok, ihr habt mich überzeugt

                      Comment

                      Working...
                      X