Toon posts:

[VB]Enkele vragen

Pagina: 1
Acties:

Verwijderd

Topicstarter
1) Is er een control, waar het mogelijk is om per informatierij een checkbox te hebben, met daarnaaste 2 kolommen (waarin text word weergegeven)

2) Heeft VB een Stack Queue en Linked Lists bibliotheek?

3) Ondersteund VB staartrecursie?

4) Ik zou voor een bepaalde directory recursief alle files willen aanspreken om die aan de hand van een bepaalde predicaat al dat niet te renamen. Welke functie gebruik je hiervoor?

Verwijderd

Op zondag 26 mei 2002 18:00 schreef gabberatski het volgende:
1) Is er een control, waar het mogelijk is om per informatierij een checkbox te hebben, met daarnaaste 2 kolommen (waarin text word weergegeven)
Standaad niet, als je'm zelf niet wilt schrijven zijne r vast wel 3th party controls die het wel kunnen maar of die gratis is is een leuke 2e vraag.
2) Heeft VB een Stack Queue en Linked Lists bibliotheek?
Nee maar er is niets wat je er van weerhoud die dingen te schrijven.
3) Ondersteund VB staartrecursie?
Staart recursie :?
4) Ik zou voor een bepaalde directory recursief alle files willen aanspreken om die aan de hand van een bepaalde predicaat al dat niet te renamen. Welke functie gebruik je hiervoor?
Dir en MoveFile (geen standaard vb functie even uit je api viewer plukken)

Verwijderd

Op zondag 26 mei 2002 18:00 schreef gabberatski het volgende:
4) Ik zou voor een bepaalde directory recursief alle files willen aanspreken om die aan de hand van een bepaalde predicaat al dat niet te renamen. Welke functie gebruik je hiervoor?
Ik zou het FileSystemObject gebruiken. Moet je wel ff een reference naar Microsoft Scripting {nogwat} (scrrun.dll) toevoegen.
Dat biedt een mooie objecten structuur, en is heel makkelijk recursief te gebruiken :).

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

1. Kan een listview dat niet?

2. Let wel op dat Dir() niet gemaakty is voor recursief gebruik. Hij heeft maar 1 buffer.

3. Voor zover ik staartrecursie begrijp van mn prolog lessen ondersteund VB dat niet.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 07-09 15:33

johnwoo

3S-GTE

Op zondag 26 mei 2002 18:06 schreef Yarvieh het volgende:

[..]

Dir en MoveFile (geen standaard vb functie even uit je api viewer plukken)
In plaats van MoveFile om te renamen zou je ook gewoon de standaard Name OldFile As NewFile constructie kunnen gebruiken ;)

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

1. ListView kan dat volgens mij ja.

  • gotcha
  • Registratie: Oktober 1999
  • Laatst online: 29-07 18:20
1. wij gebruiken hiervoor de VSFlexGrid control. Microsoft levert hiervan een beperkte versie mee onder de naam MSFlexgrid. weet alleen niet zeker of die ook checkboxes ondersteunt. De VSFlexGrid iig wel, alsmede ook dropdownlists en meer van dat moois.

2. vb zit een beetje krap in zn collection-objects
zaken als stacks etc zul je zelf moeten implementeren
(hier een voorbeeldje)

Verwijderd

Op zondag 26 mei 2002 18:00 schreef gabberatski het volgende:
1) Is er een control, waar het mogelijk is om per informatierij een checkbox te hebben, met daarnaaste 2 kolommen (waarin text word weergegeven)
Ja, die heet de ListView. Die kun je met checkboxes uitrusten.
2) Heeft VB een Stack Queue en Linked Lists bibliotheek?
VB kan alle mogelijke COM objects gebruiken, standaard weet ik niet of een stack queue erbij zit, maar die is snel gemaakt. Een linked lists lib is er niet, maar ook dat is kinderspel.
3) Ondersteund VB staartrecursie?
/me krabt zich achter de oren, maar kent geen 'staartrecursie'.

VB ondersteunt wel recursie met behoudt van local var values, dus backtracking. Zo kun je dus bv met weinig code en recursie een treeview vullen.
4) Ik zou voor een bepaalde directory recursief alle files willen aanspreken om die aan de hand van een bepaalde predicaat al dat niet te renamen. Welke functie gebruik je hiervoor?
FileSystem object denk ik, zit in de scripting runtime. Dus even toevoegen aan je refs

Verwijderd

Topicstarter
thx voor de replies

Ik heb eens effe bezig geweest aan het coden, maar het probleem is dat het natuurlijk niet doet:

Ik geef als beginpad "e:\hardcore" mee, maar er is geen "e:\hardcore\hardcore" dir. En toch krijg ik dan hier een error op(file not found).

Da code:

Public Function IterFiles(strDirPath As String)
fileentry = Dir(strDirPath, vbNormal)
Do While fileenty
Debug.Print fileentry
fileentry = Dir
Loop
End Function

Public Function IterDir(strDirPath As String)
DirEntry = Dir(strDirPath, vbDirectory)
Do While DirEntry <> ""
If DirEntry <> "." And DirEntry <> ".." Then
If (GetAttr(strDirPath & "\" & DirEntry) And vbDirectory) = vbDirectory Then
IterDir (strDirPath & "\" & DirEntry)
End If
End If
DirEntry = Dir
Loop
IterFiles (strDirPath)
End Function

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Ik heb dit, maar dat werkt ook nog niet helemaal
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Sub IterDir(strDirPath As String)
Dim DirEntry As String
Dim FileEntry As String

DirEntry = Dir(strDirPath, vbDirectory)
Do While DirEntry <> ""
  If DirEntry <> "." And DirEntry <> ".." Then
    If (GetAttr(strDirPath & DirEntry) And vbDirectory) = vbDirectory Then
    Debug.Print "Directory: " + DirEntry
    IterDir strDirPath + DirEntry + "\"
    ElseIf (GetAttr(strDirPath & DirEntry) And vbNormal) = vbNormal Then
    Debug.Print "FileName: " + DirEntry
    End If
  End If
  DirEntry = Dir
Loop

End Sub

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Dit werkt wel leuk
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Private Sub IterDir2(strdirpath)
Dim fso As FileSystemObject
Dim objFolders As Folders
Dim objFolder As Folder
Dim objFiles As Files
Dim objFile As file

Set fso = New FileSystemObject
Set objFolder = fso.GetFolder(strdirpath)
Set objFolders = objFolder.SubFolders

For Each objFolder In objFolders
  Debug.Print objFolder.Name
  IterDir2 strdirpath + "\" + objFolder.Name
  Set objFiles = objFolder.Files
  For Each objFile In objFiles
    Debug.Print objFile.Name
  Next
Next

Set objFiles = Nothing
Set objFile = Nothing
Set objFolders = Nothing
Set objFolder = Nothing
Set fso = Nothing

End Sub

Verwijderd

Leuk allemaal, maar wtf is staatrecursie!? dat wil ik dan wel weer es weten :Y)

Verwijderd

Ik zit ook al de hele tijd te wachten >:)

  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Volgens mij wordt er gewoon een recursieve functie bedoeld.

  • johnwoo
  • Registratie: Oktober 1999
  • Laatst online: 07-09 15:33

johnwoo

3S-GTE

Je kunt Dir$ inderdaad niet zomaar recursief gebruiken omdat er intern het een en ander wordt bijgehouden, en je in 1 programma geen concurrent Dir$ loopjes kan hebben. (Ik neem overigens aan dat VB daar intern een FindFirstFile..FindNextFile constructie van maakt).

Een goede workaround om toch Dir$ te kunnen gebruiken (aangezien het FSO geen native klasse is en je er dus niet vanuit kunt gaan dat-ie beschikbaar is):
Gebruik een dynamische array voor de directory namen. Files kun je ter plekke processen, zodra je een directory tegenkomt zet je die in je array. Als je alle files gehad hebt, loop je die array recursief af.
Als je liever wat meer CPU cycletjes verbrandt in plaats van het extra benodigde geheugen voor de array, zou je ook gewoon 2 Dir$ loopjes kunnen maken: eerst de files, dan de directories (of andersom).

4200Wp ZO + 840Wp ZW + 1680Wp NW | 14xIQ7+ + 1xDS3-L | MTVenusE | HWP1

Pagina: 1