Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Dateien in Ordner Zählen

  1. #1
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    Ich wäre sehr froh um einen weiteren Rat von euch

    Ich habe einen Ordner in den ich erfolgreich, dank eurer Hilfe, excel und txt Dateien schreiben kann. Auch ein Verbindungstest habe ich hinbekommen.

    Nun hänge ich an der Umsetzung den Ordnerinhalt als "Archiv" am Panel anzeigen zu lassen

    Wie kann man die vorhandenen Dateien in einem Ordner am PC zählen und dieses Ergebnis im VBS benutzen? ist das überhaupt möglich?
    Ich bräuchte das für die For schleife im Programm unten...

    Brauche das weil man nicht die Anzahl der gespeicherten Dateien auf dem PC kennt in unserem Fall..

    folgenden Code von PN/DP habe ich benutzt und kann schon mal die 20 Dateinamen anzeigen, aber auch nur wenn 20 Dateien im Ordner am PC drin sind, bei weniger geht es nicht.
    Geändert von Hocheck (05.10.2009 um 13:09 Uhr)
    Zitieren Zitieren Dateien in Ordner Zählen  

  2. #2
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    'für WinCE
    Dim fso, result, string_array(20), i, o, wert

    Set fso = CreateObject("FileCtl.FileSystem")
    result = fso.Dir("\\path\*.*")
    string_array(0) = result

    For i = 1 To 20
    result = fso.Dir() 'oder fso.Dir() ?
    string_array(i) = result

    Next

    SmartTags("DB_LAN.Feld[1]")= string_array(1)
    SmartTags("DB_LAN.Feld[2]")= string_array(2)
    SmartTags("DB_LAN.Feld[3]")= string_array(3)
    Geändert von Hocheck (05.10.2009 um 13:15 Uhr)

  3. #3
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.849
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    ich nehme mal an, das bei weniger als 20 dateien das script mit einem fehler abbricht.

    das das script auf jeden fall zu ende läuft, kannst du mit folgender zeile erreichen
    on error resume next 'nach einem fehler wird einfach das script hinter dem fehler fortgeführt
    wie man den fehler auswertet schau auch mal hier

    inwieweit sich folgendes script auf wce umsetzen lässt kann ich im moment nicht sagen.
    [php]'dieses vb-script sucht alle ordner/dateien beginnend mit dem startordner.'
    'für windows basierende systeme'

    'hauptprogramm'
    Set fso = CreateObject("Scripting.FileSystemObject")
    Subsearch Verz
    wscript.quit

    'unterordner suchen--------------------------------------------------'
    Sub SubSearch(Byval Verz)
    filesearch verz

    Set Weitere = Verz.SubFolders
    For Each AktuellerOrdner In Weitere
    i=instr(AktuellerOrdner,"Temporary Internet Files")
    if i = 0 then SubSearch AktuellerOrdner
    Next
    End Sub

    'ordner durchsuchen--------------------------------------------------'
    Sub Filesearch(Byval AktuellerOrdner)
    Set Dateien=AktuellerOrdner.files
    Set ordner=AktuellerOrdner.subfolders
    dieserordner=fso.getfolder(aktuellerordner)

    'ordner die in diesem ordner sind'
    For Each Datei in ordner
    groesse="VERZEICHNIS"
    TextFile1.Writeline datei.name & "·" & groesse
    Next

    'dateien in diesem ordner'
    For Each Datei in Dateien
    groesse=(datei.size)
    groesse=int(groesse/1024)
    TextFile1.Writeline datei.name & "·" & groesse
    end if
    Next
    End Sub
    [/php]
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation
    Zitieren Zitieren vb-script verzeichnis nach verzeichnis / datei durchsuchen  

  4. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    Hocheck (22.10.2009)

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.163
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    Hallo Hocheck,
    Zitat Zitat von Hocheck Beitrag anzeigen
    folgenden Code von PN/DP habe ich benutzt und kann schon mal die 20 Dateinamen anzeigen, aber auch nur wenn 20 Dateien im Ordner am PC drin sind, bei weniger geht es nicht.
    Was heißt "geht es nicht"? Du bekommst doch bestimmt eine konkrete Fehlermeldung?
    Sicher geht das Lesen der Dateinamen, Dein Script wird aber wahrscheinlich abgebrochen, bevor Du
    die Ergebnisse in die Panelvariablen kopiert hast.

    Es geht hier um dieses Programmbeispiel:
    http://www.sps-forum.de/showthread.p...587#post218587
    Code:
    'für WinCE
    Dim fso, result, string_array(40), i
    
    Set fso = CreateObject("FileCtl.FileSystem")
    result = fso.Dir("\\pcname\freigabeordner\*.*")
    string_array(0) = result
    For i = 1 To 40
        if result = "" Then Exit For  '(das Then hatte ich vergessen)
        result = fso.Dir              'oder fso.Dir() ?
        string_array(i) = result
    Next
    
    'string_array noch irgendwie ausgeben
    'oder gleich in 40 panel-interne String-Variablen einlesen?
    Leider hast Du eine wichtige Anweisung in der Schleife weggelassen: if result = "" Then Exit For
    Deshalb bekommst Du wahrscheinlich eine Fehlermeldung, wenn weniger Dateien als Schleifendurchläufe
    vorhanden sind.
    Also, ein bischen muß man die angebotenen Programmbeispiele auch selber durchdenken und verstehen.

    Die For-Schleife habe ich im Beispiel benutzt, um die MAXIMALE Anzahl an Schleifendurchläufen
    einfach festzulegen. Genau so viele + 1 interne Panel-Variablen für die Dateinamen mußt Du ja auch
    vorher angelegt haben. Das Script liest solange Dateinamen, bis es keine mehr gibt oder maximal
    41 Dateien gefunden wurden. Der erste gefundene Dateiname steht in string_array(0)!

    Die Methode fso.Dir() muß beim ersten mal mit einem Suchmuster als Parameter aufgerufen werden.
    Danach muß fso.Dir() ohne Parameter maximal so oft aufgerufen werden, bis kein passender Dateiname
    mehr zurückgeliefert wird, result also ein Leerstring "" ist. Dann muß das Abrufen beendet werden.
    Das steht aber auch so in der immer wieder angeführten VBScript_WinCE.pdf im FAQ von Volker.
    You must specify pathname the first time you call the Dir method. [...]
    The Dir method returns the first file name that matches pathname. To get any additional file names
    that match pathname, call Dir again with no parameters. When no more file names match, Dir returns
    a zero-length string (""). Once a zero-length string is returned, you must specify pathname in
    subsequent calls.
    Also noch einmal:
    FAQ: Protool/WinCCflex Daten lesen / schreiben mit VB-Script
    siehe besonders die im ersten Beitrag unten angehängte VBScript_WinCE.pdf


    (Ich weiß jetzt nicht, ob der Dir-Aufruf ohne Parameter mit leerer Klammer oder ohne Klammer
    geschrieben werden muß. Ich habe es halt nicht getestet.)

    Nach der Suchschleife steht in i, wieviele Dateinamen gefunden wurden.
    Damit das Script einsatztauglich wird, müsste nach der Schleife string_array(i) bis string_array(40)
    noch mit Leerstring "" belegt werden, falls weniger als 40 Dateien gefunden wurden.


    Ich bin mir nicht sicher, aber wahrscheinlich kann der Variablenname der internen Panel-Variablen
    zur Laufzeit des Scriptes zusammengesetzt werden und Du kannst statt in string_array(i) gleich
    in Deine Panel-Variablen "DB_LAN.Feld[i]" schreiben. Einfach mal ausprobieren!


    So könnte das fertige Script für 20 Dateinamen in "DB_LAN.Feld[1]" bis "DB_LAN.Feld[20]" aussehen
    (wenn WinCC flexible nichts dagegen hat):
    Code:
    'Dateinamen aus einem Ordner lesen
    'für WinCE
    Const MaxAnzahl = 20   'maximale Anzahl zu lesender Dateinamen
    Dim fso, result, tagname, i
    
    Set fso = CreateObject("FileCtl.FileSystem")
    result = fso.Dir("\\pcname\freigabeordner\*.*")
    SmartTags("DB_LAN.Feld[1]") = result
    For i = 2 To MaxAnzahl
        If result <> "" Then result = fso.Dir   'oder fso.Dir() ?
        tagname = "DB_LAN.Feld[" & i & "]"
        SmartTags(tagname) = result
    Next
    Die Programmvariante von Volker in #3 ist auch recht interessant, wenn man ALLE Dateinamen aus einem
    Ordner auslesen muß. Danach müsste man "nur" noch die erzeugte Textdatei zeilenweise anzeigen und
    ggf. scrollen.

    Gruß Harald
    Zitieren Zitieren verfeinertes Programmbeispiel  

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Hocheck (22.10.2009)

  7. #5
    Registriert seit
    05.08.2009
    Beiträge
    69
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Vielen Dank für eure Hilfe,
    Ist ja nicht selbstverständlich. Mein Problem ist dass ich keinen hier an der FH habe, der das VBS in Verbindung mit WinCC kann...
    Ich lese und probiere, finde aber alleine leider keine rechte Lösung...

    Dein Skript hat einwandfrei funktioniert, um den Ordner auslesen zu können muss man fso.Dir() benutzen!

    Ich komme einfach nicht mehr weiter. Vielleicht geh ich die Sache auch einfach komplett falsch an.

    Die Situation gesamt:
    Auf dem Panel gibt es ein Programmarchiv(DB) für Maschinenparameter.
    Als "Programm Kopf" dient eine Programmnummer und eine Programmbezeichnung, was in einer Tabelle im Panel angezeigt wird:

    Feld mit 2 Strings Feld mit 14 Strings
    Programmnummer Programmbezeichnung
    1 (DB.LAN_nummer[1]) Test (DB.LAN_Feld[1])
    2 Test1

    Diese Daten sollen mit Skript auf einem PC gesichert werden- was ich ja dank eurer Hilfe schon hinbekomme.

    Nur wie kriege ich die richtige Anzeige der Daten hin?
    Ich speicher die .txt Dateien unter diesem Dateinamen:
    Programmnummer.Programmbezeichung.txt
    2 Strings 14 Strings

    Ich würde gerne eine Auswahl haben, die mir zb eine Datei die als 5.Test.txt gespeichert wurde auch automatisch unter der Programm Nummer "5" gespeichert wird und nur die Bezeichnung "Test" unter Programmbezeichnung gespeichert wird...
    Der Speicherpfad soll variabel sein.


    Ich hatte es schon mit der Split Funktion probiert aber ich versteh es einfach nicht

    Momentan so, aber das läuft nicht richtig und gibt auch Probleme ab Prog.Nr 10....

    Meldung:
    Fehler: 20010 tag lookup only by name

    Dim i, result, pfad, tagname, zeichen, platz, fso
    Const maxanzahl = 20
    'tagname = Right("5Test",5)
    platz= "\\PC\MP277\*.txt"
    Set fso = CreateObject("FileCtl.FileSystem")
    result = fso.Dir(platz)
    SmartTags("DB_LAN.Feld[1]") = result

    For i = 2 To maxanzahl
    If result <> "" Then result = fso.Dir() 'oder fso.Dir() ?
    tagname = Right(result,5)
    If tagname = "1" Then zeichen = 1
    If tagname = "2" Then zeichen = 2
    If tagname = "3" Then zeichen = 3
    If tagname = "4" Then zeichen = 4
    If tagname = "5" Then zeichen = 5
    If tagname = "6" Then zeichen = 6
    If tagname = "7" Then zeichen = 7
    If tagname = "8" Then zeichen = 8
    If tagname = "9" Then zeichen = 9
    If tagname = "10" Then zeichen = 10
    If zeichen = i Then pfad = SmartTags("DB_LAN.Feld[" & i & "]")
    SmartTags(pfad) = result

  8. #6
    Registriert seit
    12.05.2007
    Beiträge
    416
    Danke
    14
    Erhielt 45 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Code:
     ' Ordner suchen
     If OrdnerVorhanden Then
      Set Ordnern = f.SubFolders
      i = 0
      j = 0
      ' Ordner: Anzahl
      SmartTags("Anlage\FileBrowser\OrdnerAnzahl") = f.SubFolders.Count
      For Each Ordner In Ordnern
       i = i + 1
       'Fenster: Listenfelder: Ordnernamen kopieren
       If (i>=SmartTags("Anlage\FileBrowser\OrdnerAnzeigeSeite")*OrdnerListenfelder+1)And (i<=SmartTags("Anlage\FileBrowser\OrdnerAnzeigeSeite")*OrdnerListenfelder+OrdnerListenfelder) Then
        j = j +1
        VarName = "Anlage\FileBrowser\Ordner" & j
        SmartTags(VarName) = Ordner.Name  
       End If
      Next
      'Listenfelder: Anzahl (Fenster: Listenfelder: Sichtbarkeit)
      SmartTags("Anlage\FileBrowser\OrdnerListeAnzahl") = j  
      'Seitenwechsel: Pfeil ab: Sichtbarkeit
      If (i > (SmartTags("Anlage\FileBrowser\OrdnerAnzeigeSeite") * OrdnerListenfelder + j)) Then
       SmartTags("Anlage\FileBrowser\OrdnerSeitePfeilAbAnzeige") = True 
      End If  
     End If
    Zitieren Zitieren Hier mal ein Auszug aus meinem "FileBrowser"  

  9. Folgender Benutzer sagt Danke zu xhasx für den nützlichen Beitrag:

    Hocheck (22.10.2009)

Ähnliche Themen

  1. MP277 verliert Ordner und Dateien
    Von Domi55 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 26.05.2011, 14:46
  2. Ordner Öffnen
    Von Domi55 im Forum HMI
    Antworten: 3
    Letzter Beitrag: 27.04.2011, 07:19
  3. Serv 1-3 Ordner
    Von 4nD1 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 27.10.2010, 06:37
  4. Ordner kopieren auf USB-Stick
    Von rr_zx im Forum HMI
    Antworten: 4
    Letzter Beitrag: 22.02.2007, 17:32
  5. Ordner erstellen
    Von Koala im Forum HMI
    Antworten: 2
    Letzter Beitrag: 12.09.2004, 15:34

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •