Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1312to1316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateien zählen > Dateigröße 1kB

Dateien zählen > Dateigröße 1kB
29.05.2013 12:06:24
michael
Hallo,
ich habe einige Beispiele für Dateienzählen gefunden. Unter anderem den Code unten, den ich etwas für meine Belange abgeändert habe.
Allerdings habe ich keine Idee wie ich neben dem Kriterium "Suche nach Dateiendung *.csv" noch die Dateigröße als Kriterium einbeziehen kann.
Gesucht werden alle csv-Dateien in einem Odner über 1kB Größe.
Kann mir jemand weiterhefen?
Danke und viele Grüße
Michael
'https://www.herber.de/forum/archiv/1068to1072/1069908_Dateien_aus_Verzeichnis_zaehlen.html
Option Explicit
Public i As Long Function count_Files(chkFolder As String) As Long 'Dim i As Long Dim chkFile As String i = 0 chkFile = Dir(chkFolder & "\*.csv") If chkFile = "" Then count_Files = 0 Exit Function End If i = 0 Do While chkFile "" i = i + 1 chkFile = Dir() Loop count_Files = i End Function
Sub NeueZeile()
count_Files (ThisWorkbook.Path & "\Test\")
Range("a1") = i
End Sub

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Tipp: FileLen()
29.05.2013 12:18:07
Matthias
Hallo
Um die Größe der Mappe in der dieser Code steht anzuzeigen z.B so:
MsgBox FileLen(ThisWorkbook.FullName)
Gruß Matthias

AW: Dateien zählen > Dateigröße 1kB
29.05.2013 12:29:45
EtoPHG
Hallo Michael,
"Gesucht werden alle csv-Dateien in einem Odner über 1kB Größe. "$
Wieso spielt die Ordner-Grösse eine Rolle? Sollte das nicht Dateigrösse heissen?
Wo liegt der Ordner?
Gruess Hansueli

AW: Dateien zählen > Dateigröße 1kB
29.05.2013 12:36:07
Armin
Hallo Michael,
wo hast Du den den Code her? So macht er das was Du brauchst.
Function count_Files(chkFolder As String) As Long
Dim i As Long
Dim chkFile As String
i = 0
chkFile = Dir(chkFolder & "\*.csv")
Do While chkFile  ""
If FileLen(chkFolder & chkFile) > 1000 Then
i = i + 1
End If
chkFile = Dir()
Loop
count_Files = i
End Function
Sub NeueZeile()
Range("a1") = count_Files(ThisWorkbook.Path & "\Test\")
End Sub

Anzeige
AW: Dateien zählen > Dateigröße 1kB
29.05.2013 14:51:59
michael
Danke an alle Mitwirkende, besonderer Dank an Armin, der mir "meinen" Code gleich angepasst hat!
Funktioniert - super!
Den Code habe ich nach längerer Suche hier im Forum gefunden (die meisten Fundstellen arbeiten noch mit Application.FileSearch, das in xl2007 nicht mehr gültig ist). Fundort sh. in meiner Anfrage.
Nochmal vielen Dank für die schnelle Hilfe
Michael

AW: Dateien zählen > Dateigröße 1kB
30.05.2013 19:26:46
michael
Hallo Spezialisten,
ich habe noch mal ein Problem. Ich brauche eine weitere Abfrage beim Zählen der Dateien.
Es gibt Dateinamen in der Form:
AAA_1_Name0.csv
AAA_1_Name1.csv
.
.
.
AAA_1_Name10.csv usw.
und welche, die möchte ich nicht erfassen, in der Form:
AAA_1_Name_00.csv
AAA_1_Name_10.csv
AAA_1_Name_100.csv
Der Unterschied ist der "_" hinter dem "Namensstamm"
Ich versuchte erst als Und Verknüpfung, dann ohne - leider alle mit Fehler:

'If FileLen(chkFolder & chkFile) > 1000 And FI.Name(chkFolder & chkFile)  "AAA_1_Name_*.csv"  _
Then
'If FI.Name(chkFolder & chkFile)  "AAA_1_Name_*.csv" Then
If Filename(chkFolder & chkFile)  "AAA_1_Name_*.csv" Then

Filename gibt auch ein Fehler - dachte in Analogie zu FileLen... Wie würde der entsprechende Ausdruck heißen?
Hoffe es gibt auch dafür eine "einfache" Lösung,
danke und viele Grüße
Michael

Anzeige
AW: Dateien zählen > Dateigröße 1kB
30.05.2013 19:30:33
michael
Hallo Spezialisten,
ich habe noch mal ein Problem. Ich brauche eine weitere Abfrage beim Zählen der Dateien.
Es gibt Dateinamen in der Form:
AAA_1_Name0.csv
AAA_1_Name1.csv
.
.
.
AAA_1_Name10.csv usw.
und welche, die möchte ich nicht erfassen, in der Form:
AAA_1_Name_00.csv
AAA_1_Name_10.csv
AAA_1_Name_100.csv
Der Unterschied ist der "_" hinter dem "Namensstamm"
Ich versuchte erst als Und Verknüpfung, dann ohne - leider alle mit Fehler:

'If FileLen(chkFolder & chkFile) > 1000 And FI.Name(chkFolder & chkFile)  "AAA_1_Name_*.csv"  _
Then
'If FI.Name(chkFolder & chkFile)  "AAA_1_Name_*.csv" Then
If Filename(chkFolder & chkFile)  "AAA_1_Name_*.csv" Then

Filename gibt auch ein Fehler - dachte in Analogie zu FileLen... Wie würde der entsprechende Ausdruck heißen?
Hoffe es gibt auch dafür eine "einfache" Lösung,
danke und viele Grüße
Michael

Anzeige
AW: Dateien zählen > Dateigröße 1kB
30.05.2013 23:30:44
michael
Hallo nochmal,
vielleicht habe ich noch einen Hinweis vergessen,bei:

If FI.Name(chkFolder & chkFile)  "AAA_1_Name_*.csv" Then

erscheint Laufzeitfehler 424: Objekt erforderlich.
Allerdings keine Idee wie ich ein Objekt daraus mache..
Hat jemand eine Idee?
Danke, Michael

bestimmtes Zeichen im String zählen ...
30.05.2013 23:52:23
Matthias
Hallo Michael
Sieht so aus als müsstest Du die Unterstriche im Dateinamen auswerten.
Sind es 2 Unterstriche im DateiNamen dann Erfassen, sonst nicht erfassen.
Richtig?
Evtl. hilft Dir die Bsp.Mappe um es dann in Dein Projekt einzubinden.
In der Datei ist auch die Formel als VBA-Code hinterlegt
https://www.herber.de/bbs/user/85589.xls
Tabelle1

 ABCDEF
1      
2      
3  ErfassenFormel  
4  AAA_1_Name0.csv2  
5  AAA_1_Name1.csv2  
6  AAA_1_Name10.csv2  
7      
8  nicht erfassen   
9  AAA_1_Name_00.csv3  
10  AAA_1_Name_10.csv3  
11  AAA_1_Name_100.csv3  
12      
13      

Formeln der Tabelle
ZelleFormel
D4=LÄNGE(C4)-LÄNGE(WECHSELN(C4;"_";""))
D5=LÄNGE(C5)-LÄNGE(WECHSELN(C5;"_";""))
D6=LÄNGE(C6)-LÄNGE(WECHSELN(C6;"_";""))
D9=LÄNGE(C9)-LÄNGE(WECHSELN(C9;"_";""))
D10=LÄNGE(C10)-LÄNGE(WECHSELN(C10;"_";""))
D11=LÄNGE(C11)-LÄNGE(WECHSELN(C11;"_";""))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Gruß Matthias

Anzeige
AW: bestimmtes Zeichen im String zählen ...
31.05.2013 07:34:45
Armin
Hallo Michael,
im VBA-Code würde ich die Idee von Matthias so umsetzen:
Function count_Files(chkFolder As String) As Long
Dim i As Long
Dim chkFile As String
i = 0
chkFile = Dir(chkFolder & "\*.csv")
Do While chkFile  ""
If FileLen(chkFolder & chkFile) > 1000 And _
Len(chkFolder & chkFile) = Len(Replace(chkFolder & chkFile, "_", "", 1)) + 2  _
Then
i = i + 1
End If
chkFile = Dir()
Loop
count_Files = i
End Function
Sub NeueZeile()
Range("a1") = count_Files(ThisWorkbook.Path & "\Test\")
End Sub
Gruß Armin

Anzeige
AW: bestimmtes Zeichen im String zählen ...
31.05.2013 08:45:06
EtoPHG
Hallo Armin & Michael,
Warum soll das Verzeichnis auch noch in den Test, ob 2 _ vorhanden sind? Sollte da ev. ein Verzeichnis mit _ vorkommen, geht das Ganze in die Hose. Also chkFolder weglassen:
If FileLen(chkFolder & chkFile) > 2^10 And _
Len(chkFile) = Len(chkFile, "_", "", 1)) + 2 Then

Gruess Hansueli

AW: bestimmtes Zeichen im String zählen ...
31.05.2013 10:04:15
michael
Hallo und Danke an alle Helfer,
leider sind es nicht immer 2 "_"...
Der Dateiname der von der Datenerfassung erzeugt wird kann zw. 2 bis 5 "_" enthalten.
Die Ordner wo die Datenfiles liegen können auch "_" enthalten, da Datei und Ordner quasi gleich heißen.
Der gepostete Code ist nur der kurze Testcode, mit dem ich ausprobiere ob der Teilcode funktioniert.
Im ganzen werden mit einer Schleife aus einem Meßordner - mit 50 Unterordnern, die wiederum 2 Unterordner haben, aus dem "3. Ast" die Meßdateien ausgelesen.
Die Anzahl der Meßdateien können je nach Länge des Versuchs variieren.
Die eigentlichen Messdaten liegen in csv-Dateien bei denen der letzte "_" fehlt.
In den Dateien mit dem letzten"_" werden Fehlerprotokolle abgelegt.
Bisher war es so, dass die Fehlerprotokolle kleiner 1kB waren.
Nun finde ich aber auch Messungen bei denen, warum auch immer, unnötige Datenfiles generiert werden, die so groß sind wie der eigentliche Datenfile aber immer das letze "_" im Dateinamen tragen.
Das Macro liest in der Schleife über ThisWorkbook.Path & Pfad & Dateiname&Zähler.csv die entsprechenden csv-Dateien ein.
Das Problem ist der Zähler der nun zuviele Dateien findet und bei Überschreitung einen Fehler generiert, da ja die Datei mit Dateiname&Zähler nicht existiert.
Ich hoffe jetzt ist mein Problem klarer beschrieben.
Würde mich über weitere Hilfe sehr freuen,
danke
Michael

Anzeige
AW: bestimmtes Zeichen im String zählen ...
31.05.2013 10:32:29
Armin
Hallo Michael,
dann solltet Ihr Euer Konzept überprüfen! Es sollte doch wohl möglich sein die Fehlerlisten mit einem besonderen Kennzeichen zu versehen. Und nicht ein schlechte Planung dann mit Software wieder "auszubügeln".
Gruß Armin

AW: bestimmtes Zeichen im String zählen ...
31.05.2013 10:54:42
michael
Hallo Armin,
ja das wäre wünschenswert, aber das macht die WinCC von Siemens ebenso und lt. Auskunft der Spezialisten bleibt das auch so...
Vielleicht gibt es doch noch eine Softwarelösung in xl?
Danke, viele Grüße
Michael

Merkmal muss definierbar sein!
31.05.2013 10:55:44
EtoPHG
Hallo Michael,
Wenn du kein eindeutiges Merkmal für die Dateinamen, welche verarbeitet werden sollen, bestimmen kannst, dann kannst du es auch nicht programmieren!
Eine Aussage wie kann zw. 2 bis 5 "_" enthalten und bei denen der letzte "_" fehlt oder immer das letze "_" sind widersprüchlich, denn jeder Dateiname mit mind 1 "_" hat auch ein letztes "_"?
Im schlimmsten Fall müsstest du jede Datei öffnen um aufgrund des Inhalts Merkmale zu bestimmen und die Datein weiterverarbeiten oder eben nicht.
Welche Regeln würdest du denn anwenden, wenn du das Ganze manuell durchführen müsstest?
Gruess Hansueli

Anzeige
AW: Merkmal muss definierbar sein!
31.05.2013 11:55:34
michael
Hallo Hansueli,
händisch würde ich so vorgehen:
Ich kenne den Wortstamm vom Dateinamen z.B. AAA_1_Name oder A_AAA_1_Name oder A_A_A_1_Name
Die Dateien die ich benötige heißen dann z.B.
Wortstamm&Zähler.csv
AAA_1_Name0.csv
AAA_1_Name1.csv
AAA_1_Name2.csv ...
AAA_1_Name10.csv
oder
A_AAA_1_Name0.csv
A_AAA_1_Name1.csv
A_AAA_1_Name2.csv ...
A_AAA_1_Name10.csv
oder
A_A_A_1_Name0.csv
A_A_A_1_Name1.csv
A_A_A_1_Name2.csv
A_A_A_1_Name10.csv
Wobei Name für eine unterschiedliche Zeichenfolge steht.
die NICHT benötigten Dateien lauten:
Wortstamm_?.csv, Wortstamm_?.csv, Wortstamm_?.csv
AAA_1_Name_00.csv
AAA_1_Name_10.csv
AAA_1_Name_02.csv ...
AAA_1_Name_100.csv
oder
A_AAA_1_Name_0.csv
A_AAA_1_Name_10.csv
A_AAA_1_Name_20.csv ...
A_AAA_1_Name_100.csv
oder
A_A_A_1_Name_0.csv
A_A_A_1_Name_10.csv
A_A_A_1_Name_02.csv
A_A_A_1_Name_100.csv
Mein Suchkriterium lautet Wortstamm_*.csv
Der Wortstamm ist bekannt, das "_" danach auch; * steht für die unbekannten Zeichen zwischen _ und .csv
Deshalb die Suche nach dem Auslesen des Dateinamens in
If FI.Name(chkFolder & chkFile) "Wortstamm_*.csv" Then
oder
If Filename(chkFolder & chkFile) "Wortstamm_*.csv" Then
Denn für die zu zählende Datei gilt "Wortstamm*.csv"
Wenn ich die Suchfunktion im Windowsexplorer nuzte und nach "Wortstamm_*.csv" suche werden alle Dateien gefunden die ich nicht brauche. Also dachte ich wenn ich nach ungleich in VBA suche sollten meine zu zählenden erkannt werden.
Ich hoffe ich konnte meinen Denkansatz verständlich beschreiben.
Danke für jede Hilfe
Michael

Anzeige
Löse mal deine Widersprüche auf,
31.05.2013 13:09:34
EtoPHG
Michael,
Stelle mal zusammen, was du da oben geschrieben hast:
Ich kenne den Wortstamm vom Dateinamen z.B. AAA_1_Name
Widerspruch:
Wobei Name für eine unterschiedliche Zeichenfolge steht.
Also ist Name nicht Teil des Wortstamms?
Die Dateien die ich benötige heißen dann z.B.
Widerspruch:
Wenn ich die Suchfunktion im Windowsexplorer nuzte und nach "Wortstamm_*.csv" suche werden alle Dateien gefunden die ich nicht brauche.
Was brauchst du und was nicht?
Gruess Hansueli

Anzeige
AW: Löse mal deine Widersprüche auf,
31.05.2013 13:37:50
michael
Hallo Hansueli,
danke, dass du noch mal nachfrägst.
Die Dateien die ich suche:
WortstammZahl.csv
nicht Suche
Wortstamm_Zahl.csv
Das mit dem Windowsexplorer sollte zeigen, dass wenn ich nach Wortstamm_*.csv suche, dass dann alle Dateien mit Wortstamm_Zahl.csv gefunden werden.
Die Dateien mit WortstammZahl.csv nicht- soweit alles gut und richtig (Zur Erklärung der Suchstrategie, wie ich vorgehen würde und hoffte, dass es grundsätzlich in VBA funktionieren sollte)
Allerdings benötige ich in VBA die umgekehrten Sucherfolge. Daeshalb ungleich Wortstamm_*.csv, damit die Dateien mit WortstammZahl.csv gefunden/gezählt werden.
Zur Sicherheit: auch im Wortstamm können "_" enthalten sein, diese kenne ich, da ich den gesamten Namen des Wortstamms kenne.
Danke, viele Grüße
Michael

AW: Merkmal muss definierbar sein!
31.05.2013 11:56:57
michael
Hallo Hansueli,
händisch würde ich so vorgehen:
Ich kenne den Wortstamm vom Dateinamen z.B. AAA_1_Name oder A_AAA_1_Name oder A_A_A_1_Name
Die Dateien die ich benötige heißen dann z.B.
Wortstamm&Zähler.csv
AAA_1_Name0.csv
AAA_1_Name1.csv
AAA_1_Name2.csv ...
AAA_1_Name10.csv
oder
A_AAA_1_Name0.csv
A_AAA_1_Name1.csv
A_AAA_1_Name2.csv ...
A_AAA_1_Name10.csv
oder
A_A_A_1_Name0.csv
A_A_A_1_Name1.csv
A_A_A_1_Name2.csv
A_A_A_1_Name10.csv
Wobei Name für eine unterschiedliche Zeichenfolge steht.
die NICHT benötigten Dateien lauten:
Wortstamm_?.csv, Wortstamm_?.csv, Wortstamm_?.csv
AAA_1_Name_00.csv
AAA_1_Name_10.csv
AAA_1_Name_02.csv ...
AAA_1_Name_100.csv
oder
A_AAA_1_Name_0.csv
A_AAA_1_Name_10.csv
A_AAA_1_Name_20.csv ...
A_AAA_1_Name_100.csv
oder
A_A_A_1_Name_0.csv
A_A_A_1_Name_10.csv
A_A_A_1_Name_02.csv
A_A_A_1_Name_100.csv
Mein Suchkriterium lautet Wortstamm_*.csv
Der Wortstamm ist bekannt, das "_" danach auch; * steht für die unbekannten Zeichen zwischen _ und .csv
Deshalb die Suche nach dem Auslesen des Dateinamens in
If FI.Name(chkFolder & chkFile) "Wortstamm_*.csv" Then
oder
If Filename(chkFolder & chkFile) "Wortstamm_*.csv" Then
Denn für die zu zählende Datei gilt "Wortstamm*.csv"
Wenn ich die Suchfunktion im Windowsexplorer nuzte und nach "Wortstamm_*.csv" suche werden alle Dateien gefunden die ich nicht brauche. Also dachte ich wenn ich nach ungleich in VBA suche sollten meine zu zählenden erkannt werden.
Ich hoffe ich konnte meinen Denkansatz verständlich beschreiben.
Danke für jede Hilfe
Michael

AW: Merkmal muss definierbar sein!
31.05.2013 12:34:49
michael
... noch eine Anmerkung zum "letzten _"
damit meine ich das "_" nach dem Wortstamm (der auch "_" enhalten kann)
also
Wortstamm0.csv - wird benötigt
Wortstamm_10.csv - wird NICHT benötigt
Wort_stamm0.csv - wird benötigt
Wort_stamm_10.csv - wird NICHT benötigt.
Der Wortstamm der Dateien ist bekannt und wird der Schleife übergeben
Danke, viele Grüße
Michael

AW: Merkmal muss definierbar sein!
31.05.2013 12:35:53
michael
... noch eine Anmerkung zum "letzten _"
damit meine ich das "_" nach dem Wortstamm (der auch "_" enhalten kann)
also
Wortstamm0.csv - wird benötigt
Wortstamm_10.csv - wird NICHT benötigt
Wort_stamm0.csv - wird benötigt
Wort_stamm_10.csv - wird NICHT benötigt.
Der Wortstamm der Dateien ist bekannt und wird der Schleife übergeben
Danke, viele Grüße
Michael

csv einlesen
31.05.2013 14:33:29
Anton
Hallo Michael,
so vielleicht:
Code:

Sub b()
  Dim chkFile As String, strTmp As String, chkFolder As String, strTeile  
  chkFolder = "C:\tmp\michi\" 'anpassen
  chkFile = Dir(chkFolder & "\*.csv")
  Do While chkFile <> ""  
    If FileLen(chkFolder & chkFile) > 1024 Then  
      strTmp = Replace(LCase(chkFile), ".csv", "")
      strTeile = Split(strTmp, "_")
      If Not IsNumeric(strTeile(UBound(strTeile))) Then    
        Debug.Print chkFile
      End If  
    End If  
    chkFile = Dir()
  Loop
End Sub  


mfg Anton

AW: csv einlesen
31.05.2013 18:34:40
michael
DANKE Anton!
SENSATIONELL es funtioniert - ich habe jetzt einige Zeit gebraucht, um nachzuvollziehen was dein Code bewirkt. Verstanden hab ich es noch nicht ganz.
Magst du mir das vielleicht noch erklären?
Vor allem:
- woher weiß VBA das das letzte Fragment zur Prüfung ob Zahl oder nicht herangezogen wird?
- UBound (Obergrenze = höchste Zahl?) Das Ergenis entspricht der Anzahl "_" oder wird etwas anderes gezählt? Denn strTeile in Ubound(strTeile) hat keine "_"
- was bewirkt Debug.Print chkFile?
ARC_1_T2WT0.csv (die zu prüfende Datei)
strTmp = ARC_1_T2WT0 (erestzt ".csv" zu "" - Dateiname ohne Erweiterung)
strTeile = T2WT0 (strTmp an den "_" teilen)(von den 3 möglichen Teilen wird der letzte in die Variable geladen - warum der letzte?)
UBound(strTeile) = 2 (UBound = Obergrenze entspricht höchstem Wert? Höchster Wert von strTeile = 2? Wo erhalte ich eine 2 aus T2WT0? Die 2 würde aber gut zu den 2 "_" im Dateinamen passen.
Prüfung ob der letzte abgeschnittene Teil nicht eine Zahl ist - in diesem Fall nein und wird gezählt
ARC_1_T2WT_00.csv
strTmp = ARC_1_T2WT_00
strTeile = 00 (von 4 Teilen, der letzte)
UBound(strTeile) = 3 (3 "_")
Prüfung auf "Nicht-Zahl" ja, nicht gezählt
Nochmal vielen Dank für die Mühe und Zeit, die du meinem Problem gewidmet hast!
Viele Grüße
Michael

Du hast einiges falsch verstanden,
31.05.2013 19:29:34
EtoPHG
Michael,
1. Antons Code gibt druckt mit Debug.Print chkFile den Dateinamen ins Direktfenster des VBE.
2. Der Code prüft vorher, ob der Dateiname (ohne die Extension) nicht auf ein Zahl endet.
3. Die Anweisung Ubound(strTeile) enthält den höchsten Index des Arrays nach dem Aufteilen durch die Anweisung Split(string, delimiter). Das erste Element des Arrays hat den Index 0. Somit entspricht der höchste Index den Anzahl Elementen - 1.
4. Somit würde er auch ein Dateien mit Namen.Ext wie Gugus.csv, Gugus_Dada.csv, Gugus_Dada_X0123.csv, GugusDada0123.csv verarbeiten, aber solche mit Namen wie 123.csv, G_u_g_u_s_0_1_2.csv,Gugus_345.csv ausfiltern.
Gruess Hansueli

DANKE!
31.05.2013 19:51:55
michael
Danke Hansueli,
langsam wirds verständlicher...
VG
Michael

AW: Dateien zählen > Dateigröße 1kB
29.05.2013 12:36:58
Matthias
Hallo Hansueli
Allerdings habe ich keine Idee wie ich neben dem Kriterium "Suche nach Dateiendung *.csv" noch die Dateigröße als Kriterium einbeziehen kann.
Also denke ich, er meint auch die Dateigröße. Also gehts mit FileLen(Dateiname)
Gruß Matthias

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige