quote:Before using the FSO, you have to add the "Microsoft Scripting Runtime Library" to the current project by selecting "Project", "References" from the menu bar.
Zal ik het topic veranderen?quote:Op vrijdag 15 april 2005 19:34 schreef sop het volgende:
't is meer Visual Basic voor Chandler door Sop
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | Public Function ListFilesInDir(ByVal path As String, ByVal filespec As String) As Collection Dim spec As Variant Dim file As Variant Dim subdir As Variant Dim subdirs As New Collection Dim specs() As String Set ListFilesInDir = New Collection If Right$(path, 1) <> "\" Then path = path & "\" specs() = Split(filespec, ";") On Error Resume Next LoadingDirsActive = True For Each spec In specs file = Dir$(path & spec) Do While Len(file) FileDetect = StrConv(Right(file, 3), vbLowerCase) file = path & file If IsSupportedFile(FileDetect) Then NumAddFils = NumAddFils + 1 FilesPath = 1 Form1.List1.AddItem file End If file = Dir$ Loop Next file = Dir$(path & "*.*", vbDirectory) Do While Len(file) If file = "." Or file = ".." Then ElseIf (GetAttr(path & file) And vbDirectory) = 0 Then Else file = path & file subdirs.Add file, file End If file = Dir$ Loop For Each subdir In subdirs For Each file In ListFilesInDir(subdir, filespec) FileDetect = StrConv(Right(file, 3), vbLowerCase) If IsSupportedFile(FileDetect) Then NumAddFils = NumAddFils + 1 FilesPath = 1 Form1.List1.AddItem file End If Next Next LoadingDirsActive = False End Function |
1 | Call ListFilesInDir(files, "*.*") |
Zoiets als dit:quote:Op zondag 17 april 2005 14:04 schreef QuietGuy het volgende:
Dan nu even een vraagje van mij
Ik ben bezig met een statistiekenscript voor Windows-webservers. Ik weet dat er al een aantal zijn maar ik wil er zelf ook een maken.
Ik ben al een heel eind, VB genereert een include file welke te gebruiken is in PHP of ASP, wat je maar wilt. Daarop kan je een aardige output baseren, zoals bijvoorbeeld http://quietguy.is-a-geek.org/qgstats/
Nu wil ik ook de temperatuur van de hardware hier bij plaatsen. Eenander statistiekenscript wat ik voorheen gebruikte, gebruikte hiervoor Motherboard Monitor. Ik wil dus niet afhankelijk zijn van steeds losse programmaatjes en wil dit dus ook in mijn Visual Basic-programma krijgen.
Nu zou dit opvraagbaar moeten zijn door middel van de WMI-set Win32_TemperatureProbe maar ik krijg daar geen output van terug. Van andere WMI-sets krijg ik wel mooi alle gegevens die ik wil.
Kan iemand mij een klein voorbeeldje geven van het opvragen van temperaturen, met of zonder WMI?
Ik krijg er geen output van, maar MotherBoard Monitor geeft wél outputquote:Op zondag 17 april 2005 14:22 schreef The_Terminator het volgende:
[..]
Zoiets als dit:
http://vbnet.mvps.org/index.html?code/wmi/wmitemperatureprobe.htm
Ik ook niet, heb een Asus A7N8X moederbord. Heb nog een andere pc met een Abit moederbord, deze geeft de temperaturen wel door. Is dus per systeem anders, denk dat het veroorzaakt wordt doordat de 'Win32_TemperatureProbe' call niet op alle moederborden werkt...quote:Op zondag 17 april 2005 15:14 schreef QuietGuy het volgende:
[..]
Ik krijg er geen output van, maar MotherBoard Monitor geeft wél output
(Src: tempprobe.zip)
Bij mij is het dus ook een asus moederkoekje... balen... Andere oplossing zonder WMI anyone?quote:Op zondag 17 april 2005 17:01 schreef The_Terminator het volgende:
[..]
Ik ook niet, heb een Asus A7N8X moederbord. Heb nog een andere pc met een Abit moederbord, deze geeft de temperaturen wel door. Is dus per systeem anders, denk dat het veroorzaakt wordt doordat de 'Win32_TemperatureProbe' call niet op alle moederborden werkt...
Het hoeft ook niet makkelijk te zijn, zo leer je weer watquote:Op maandag 6 juni 2005 14:40 schreef Chandler het volgende:
hmm, je maakt het me niet gemakkelijk zie ik al wel weer, mja ik ga er wel even mee spelen!.
ah, hij verspreid zich alquote:Op maandag 6 juni 2005 15:27 schreef sop het volgende:
Chandler: Bedank QG eens voor zijn mooie Network Traffic module!
Is niet zo moeilijk. Ik pas je source even aan en plaats de link hier zometeen wel.quote:Op woensdag 4 januari 2006 17:51 schreef Chandler het volgende:
maar ok, als ik dat gebruik moet ik ook nog de data op de juiste plaats zien te krijgen, en dat lukt nu helaas nog niet
Wat ik al heb (http://upload.bruggema.nl/index.php?i=v&ip=1372487152&name=backup directories.zip)
Ik heb alleen het volgende aangepast:quote:Op woensdag 4 januari 2006 18:05 schreef Chandler het volgende:
als je wil, zet er dan ff comments bij... dan kan ik er van leren
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | If lister.view = "from" Then If Right$(Dir.Path, 1) = "\" Then lister.fromDir.Text = Dir.Path Else lister.fromDir.Text = Dir.Path & "\" End If ElseIf lister.view = "to" Then If Right$(Dir.Path, 1) = "\" Then lister.toDir.Text = Dir.Path Else lister.toDir.Text = Dir.Path & "\" End If End If Unload Me 'MsgBox (Dir.Path & " enzo " & view) End Sub |
Waar heb je het over?quote:Op vrijdag 17 februari 2006 22:15 schreef Gajus het volgende:
Vraagje over VB-tags bij tekstopmaak:
Achter een gewoon tekstblok is het mogelijke een extra tekstblok toe te voegen; dit extra tekstblok wordt pas zichtbaar als de muiscursor op de gewone tekstblok geplaatst wordt.
De syntax lijkt op [spoiler=GewoneTekst]ExtraTekst[/spoiler] ... maar is niet correct. Wat is dan wel de goede syntax?
Binnen een tekst kun jij tags plaatsen zoals (b) en (/b), maar dan met hoekige haken. Zo bestaan er ook tags om extra tekst toe te voegen aan een normale tekst. Ik weet dat die tags bestaan en toepasbaar zijn binnen het Forum aangezien ik zij ooit heb gebruikt (maar dat was in de Preview-mode, dus kan ik het niet terugvinden).quote:Op zaterdag 18 februari 2006 10:40 schreef Chandler het volgende:
Misschien is een wat duidelijker uitleg handig in deze zaak?weet je wel zekers dat je het over VisualBASIC hebt?
Jij doelt op vB-code (vBulletin, een webforum pakket)quote:Op zaterdag 18 februari 2006 16:13 schreef Gajus het volgende:
(...) en ook VB-code (VB= VisualBasic).
VisualBasic is een soort van RAD tool met een BASIC achtige syntax, voornamelijk gebruikt door (zoals het topic al aangeeft) dummies.quote:Ik ben van de ArpaNet-generatie en recentere ontwikkelingen zoals VisualBasic zijn aan mij voorbij gegaan. Jouw vraag of dit een VisualBasic aangelegenheid betreft, kan ik dan ook niet bevestigen of ontkennen.![]()
Mijn dank voor het oplossen van dit misverstand.quote:Op zaterdag 18 februari 2006 16:48 schreef Aaargh! het volgende:
Jij doelt op vB-code (vBulletin, een webforum pakket)
VisualBasic is een soort van RAD tool met een BASIC achtige syntax, voornamelijk gebruikt door (zoals het topic al aangeeft) dummies.![]()
![]()
Ai, dit maakt het wel heel erg complex, zelfs voor zo'n simpel toolje.quote:Op woensdag 4 januari 2006 18:11 schreef The_Terminator het volgende:
[..]
Ik heb alleen het volgende aangepast:
[ code verwijderd ]
Dus gewoon kijken wat voor waarde de variable 'view' heeft en dan de juiste textbox op de form 'lister' aanpassen. Ik heb ook een functie ingebouwd die checkt of er een '\' achter het pad staat.
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 28 29 30 31 32 33 | Private Sub Command1_Click() Me.SelectedDir = Dir.Path Me.Hide 'MsgBox (Dir.Path & " enzo " & view) End Sub Private Sub Drive_Change() Dir.Path = Drive.Drive End Sub Public Static Property Get SelectedDir() As String SelectedDir = mvarDirSelected End Property Public Static Property Let SelectedDir(ByVal sNewValue As String) Dim tmpdir As String ' Dit voor een beetje controle op het formaat van de binnenkomende string als het property van buiten wordt gezet. Waterdicht is deze niet If InStr(1, sNewValue, ":\", vbTextCompare) > 0 Then Drive.Drive = sNewValue Dir.Path = sNewValue End If ' Einde controle 'Code uit Command1_click, maar een beetje aangepast If Right(sNewValue, 1) = "\" Then tmpdir = sNewValue Else tmpdir = sNewValue + "\" End If mvarDirSelected = tmpdir End Property |
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 28 29 30 31 32 33 34 35 36 37 38 | 'Ik heb een hekel aan het standaard scherm dat VB in het geheugen kwakt. 'Je hebt veel minder controle op die manier. 'Daarom definieer ik altijd nieuwe scherm objecten die na gebruik weg gooi. ' Dim frmFrom As Brouwser Set frmFrom = New Brouwser ' 'optioneel kun je ook de geselecteerde directory in het brouwser scherm zetten ' De huidige directory wordt dan voor geselecteerd ' If Trim(fromDir.Text) <> "" Then frmTo.SelectedDir = fromDir.Text End If 'Laat het scherm zien frmFrom.Show vbModal 'Haal de waarde op. het scherm zit nog in het geheugen en is "aanspreekbaar" 'Zolang je GEEN grafische objecten aanspreekt zal het niet opnieuw geladen worden ! '!Dit is laatste is erg belangrijk! fromDir.Text = frmFrom.SelectedDir 'Gooi het scherm weg Unload frmFrom Set frmFrom = Nothing End Sub Private Sub ToBrouwse_Click() Dim frmTo As Brouwser Set frmTo = New Brouwser If Trim(toDir.Text) <> "" Then frmTo.SelectedDir = toDir.Text End If frmTo.Show vbModal toDir.Text = frmTo.SelectedDir Unload frmTo Set frmTo = Nothing End Sub |
1 2 3 4 5 6 7 8 | DoEvents btnCrime.Enabled = False btnCrime.Caption = "Waiting " & Round(StartCrime - Timer + PauseCrime) & " secs" PauseCrime = PauseCrime - 0.000001 blnCrime = False Call checkCar Loop |
Wat jij doet heet een busy-wait, en dat mag je NOOIT doen op een multitasking OS.quote:Op maandag 20 februari 2006 12:29 schreef DaFan het volgende:
Ik ook een VB vraag! Het gaat over de Timer, ik wil m meerdere malen naast elkaar laten lopen (4x) om iets af te tellen op een knop tot het moment dat die knop weer vrijgegeven wordt.
ik gebruik nu de volgende Do While Loop:
[ code verwijderd ]
Het probleem van de Timer() is dat ie telt in seconden vanaf middernachtquote:Op maandag 20 februari 2006 12:41 schreef Aaargh! het volgende:
[..]
Wat je in VB waarschijnlijk kan doen is een timer maken die na 1 seconde een event genereerd (dat kan neem ik aan?) .
Ik heb in een grijs verleden nog wel eens met VB geprutst (nog steeds nachtmerries van). Maar volgens mij had je toen gewoon een Timer dingetje wat je b.v. op 1 seconde kon zetten en dan ging er gewoon elke seconde een event af.quote:Op maandag 20 februari 2006 13:05 schreef DaFan het volgende:
[..]
Het probleem van de Timer() is dat ie telt in seconden vanaf middernachtDaarom moet je ook die <= gebruiken. Je kan m niet laten starten vanaf het moment dat je de Sub oproept.
Ik ben het nog niet tegen gekomen. Als er anderen zijn die dit topic lezen en het wel weten...graagquote:Op maandag 20 februari 2006 13:43 schreef Aaargh! het volgende:
[..]
Ik heb in een grijs verleden nog wel eens met VB geprutst (nog steeds nachtmerries van). Maar volgens mij had je toen gewoon een Timer dingetje wat je b.v. op 1 seconde kon zetten en dan ging er gewoon elke seconde een event af.
Dat klopt.quote:Op maandag 20 februari 2006 13:43 schreef Aaargh! het volgende:
[..]
Ik heb in een grijs verleden nog wel eens met VB geprutst (nog steeds nachtmerries van). Maar volgens mij had je toen gewoon een Timer dingetje wat je b.v. op 1 seconde kon zetten en dan ging er gewoon elke seconde een event af.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Private Sub Form_Load() stDate = Now() Label1.Caption = "" Timer1.Enabled = True End Sub Private Sub Timer1_Timer() If DateDiff("s", stDate, Now()) <= 5 Then Label1.Caption = Label1.Caption + Format(Now(), "dd-mm-yy hh:nn:ss") + vbNewLine Else Label1.Caption = Label1.Caption + "einde" Timer1.Enabled = False End If End Sub |
Is het niet beter om een API timer te gebruiken?quote:Op maandag 20 februari 2006 15:21 schreef DiRadical het volgende:
[..]
Dat klopt.
Je kunt de timer.inteval op 1000 zetten (tijd in milli seconden) en dan gaat het event elke seconde af totdat de timer disabled wordt
In het timer event kun je de timer disabelen.
[ code verwijderd ]
1 2 3 4 5 6 7 8 9 10 11 12 13 | Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long Dim Timer1 As Long Function StartTimer1() Timer1 = KillTimer(0, Timer1) Timer1 = SetTimer(0, 0, 1000, AddressOf TimerSub1) End Function Function StopTimer1() Timer1 = KillTimer(0, Timer1) End Function |
1 2 3 | 'code in deze functie wordt om de 1000 ms getriggerd door de timer End Function |
1 2 3 | StopTimer1 End Sub |
Ja,quote:Op maandag 20 februari 2006 16:10 schreef DaFan het volgende:
DiRadical:
Die code van jou gaat om de 1 sec in de If functie? En dat 5x?
Het kan.quote:Op maandag 20 februari 2006 16:30 schreef The_Terminator het volgende:
[..]
Is het niet beter om een API timer te gebruiken?
Deze code moet dan in een module:
[ code verwijderd ]
Dit mag in een module staan, maar ook in een form:
[ code verwijderd ]
Deze code moet in de form staan:
[ code verwijderd ]
Om de timer te starten gebruik je: StartTimer1
Om de timer te stoppen gebruik je: StopTimer1
Owja, niet op de stop knop van VB drukken voordat je een API timer gestopt hebt, anders crasht VB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | If blnCrime = True Then StartCrime = StartCrime - 1 If StartCrime = 0 Then btnCrime.Caption = "Crime" blnCrime = False btnCrime.Enabled = True Exit Sub End If btnCrime.Caption = StartCrime Else: btnCrime.Caption = "Crime" End If If blnCar = True Then StartCar = StartCar - 1 If StartCar = 0 Then btnCar.Caption = "Car" blnCar = False btnCar.Enabled = True Exit Sub End If btnCar.Caption = StartCar Else: btnCar.Caption = "Car" End If End If |
Met een knop ofzo?quote:Op dinsdag 21 februari 2006 20:52 schreef woutabest het volgende:
Ik weet vanaf het begin al dat ik meerdere forms in één project kan stoppen. Dan moet het dus ook mogelijk zijn om tussen die twee te switchen.
Hoe doe ik dat? Ik draai hier VB.net 2003
1 2 3 4 5 6 | Form1.Hide Form2.Show End Sub |
1 |
Dan krijg ik de volgende melding:quote:Op dinsdag 21 februari 2006 21:55 schreef DaFan het volgende:
[..]
<formnaam>.Show zou gewoon moeten werken![]()
1 |
Staan ze wel in dezelfde application? Want hij vraagt nu om een Object terwijl bij 2 Forms in dezelfde Application dat niet nodig is (omdat het object hetzelfde is).quote:Op dinsdag 21 februari 2006 21:58 schreef woutabest het volgende:
[..]
Dan krijg ik de volgende melding:
[ code verwijderd ]
Niet in .NETquote:Op dinsdag 21 februari 2006 21:55 schreef DaFan het volgende:
[..]
<formnaam>.Show zou gewoon moeten werken![]()
1 2 | frm.show |
Als je meerdere schermen wilt, kun je natuurlijk ook een MDI applicatie maken.quote:Op woensdag 22 februari 2006 12:07 schreef woutabest het volgende:
het werkt!
dankje!
Ook DeFan natuurlijk bedankt, je deed je best
MDI is Multiple Document Interface waarbij je een scherm hebt waarin de andere scherm geopend wordenquote:Op woensdag 22 februari 2006 13:30 schreef woutabest het volgende:
Toch leuk, al die termen die ik niet snap.
Ik probeer een klokje te maken. Als ik op een knop in MainMenu1 druk, komt form2 tevoorschijn waarin ik alles kan invoeren.
Nu moet ik nog even iets vinden waarbij ik de data over kan brengen. Zelf zit ik te denken aan om het op te slaan in een .txt bestand, en dat ik mijn programma dan 'refresh'.
Opslaan wil ik toch wel, dus dat wordt niet veel meer werk.
Dit zit toch al in MS Outlook ?quote:Op woensdag 22 februari 2006 15:11 schreef woutabest het volgende:
Een simpel progje dat aftelt naar een bepaalde datum en tijd en als het zover is een melding geeft. Zegmaar een 'kom van de computer af' of een 'je hebt een afspraak'.
Zal wel niet erg moeilijk zijn
1 2 3 4 5 6 7 | On Error GoTo topathErr toDir.path = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") GoTo topathklaar topathErr: toDir.path = "c:" topathklaar: |
Als je todrive.path fout gaat, moet je IF toch ook fout.quote:Op vrijdag 7 april 2006 12:56 schreef Chandler het volgende:
Ik zit met een klein probleem:
[ code verwijderd ]
het probleem zit in todrive.path maar kan niet zorgen dat wanneer het path fout is het script naar de volgende goto gaat? wat doe ik fout?
1 2 3 4 5 6 7 8 | If QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") > "" Then toDir.path = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") GoTo topathklaar End If topathErr: toDir.path = "c:" topathklaar: |
1 2 3 4 5 6 7 8 9 | dim sFolder as string set fso = new FileSystemObject sFolder = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") if fso.FolderExists(sFolder) = true then toDir.path = sFolder else toDir.path = "c:" end if |
1 |
Je zegt dat de directory niet bestaat.quote:Op vrijdag 7 april 2006 22:42 schreef Chandler het volgende:
hoe moet dat dan anders? want het werkt wel als ik juiste gegevens in het register hebdus snap niet waar de fout zit?
1 2 3 4 5 6 7 8 9 | If QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") _ > "" Then toDir.path = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") GoTo topathklaar End If topathErr: toDir.path = "c:\" topathklaar: |
1 |
1 |
1 2 3 4 5 | If QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") > "" Then toDir.path = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") GoTo topathklaar End If |
1 2 3 4 5 | HPtimer = 0 mapleCalculator.maxHPsaved.Text = CStr(CInt(mapleCalculator.maxHPsaved.Text) + _ CInt(mapleCalculator.maxHPadd.Text)) End If |
1 |
Ook QueryValue moet een padnaam met een \ aan het eind terug geven, controleer de registry of maak een functie die een \ toevoegt als die niet aanwezig is.quote:correct, maar dan nog geeft het een error op toDir.path = QueryValue daar blijft het programma op hangen!
oftweel hier zit het probleem op regel 3!! (toDir.)
1
2
3
4
5On Error GoTo topathErr
If QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir") > "" Then
toDir.path = QueryValue(HKEY_CURRENT_USER, "Software\quicktreecopy", "todir")
GoTo topathklaar
End If
1 |
1 |
1 2 3 4 | Label = lbl & Job & Labelnummer Label.Visible = True Next |
Val() is zo'n wazige VB6 functie. Die kan je beter niet gebruiken.quote:Op woensdag 4 april 2007 10:17 schreef DaFan het volgende:
Tis gelukt Rembo, maar ik heb het gewoon gedaan met Val() zodat als er een String in staat het resultaat gewoon 0 is, dat werkte uiteindelijk ook
Je zou de labels allemaal in een array kunnen zetten.quote:Andere vraag:
Ik wil in een keer een hele grote groep labels en textboxes visible maken. [...]
Een array van labels is het makkelijkste, dan wordt het ongeveer zo:quote:Op woensdag 4 april 2007 14:09 schreef SuperRembo het volgende:
[..]
Val() is zo'n wazige VB6 functie. Die kan je beter niet gebruiken.
[..]
Je zou de labels allemaal in een array kunnen zetten.
Of misschien kan je er voor zorgen dat ze allemaal op 1 panel o.i.d. staan zodat je ze in 1x zichtbaar kan maken.
Of je kunt door de controls collection van het form / panel / groupbox kunnen lopen.
1 2 3 4 5 6 | Dim k as integer For k = 0 To 29 Label(k).Visible = True Next |
quote:Val() is zo'n wazige VB6 functie. Die kan je beter niet gebruiken.
VB.net?quote:Op vrijdag 20 juli 2007 16:39 schreef Chandler het volgende:Sr
Nog 1 vraagje.
Ik werk nu met line input, echter werkt dit bij 1 groot tekst bestand niet.. Line input ziet niet dat het een tekst bestand is en leest gelijk het hele bestand uit... wat kan ik hier aan veranderen zodat hij wel alle regels leest?
Anyone?
quote:A line is defined as a sequence of characters followed by a carriage return (0x000d), a line feed (0x000a), a carriage return followed by a line feed, Environment.NewLine, or the end of stream marker. The string that is returned does not contain the terminating carriage return and/or line feed. The returned value is a null reference (Nothing in Visual Basic) if the end of the input stream has been reached.
Ik hoop dat het werkt, want die converter kan geen UTF-8 tekens converterenquote:Op vrijdag 20 juli 2007 20:12 schreef SuperRembo het volgende:
Met een TextReader zou het moeten kunnen. ReadLine geeft 1 regel terug:
De TextReader class bestaat al sinds .NET 1.0. Het lijkt me niet dat er heel veel in veranderd is.quote:Op vrijdag 20 juli 2007 21:26 schreef Chandler het volgende:
This page is specific to .NET Framework 3.0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | While Not readBytes >= fileSize 'EOF(freeNum) ' Line Input #FreeNum, txt ' 1 whole line is read Do While readByte <> Chr(10) Get #freeNum, , readByte Debug.Print Len(txt) & "-" & Len(readByte) & "-" & Asc(readByte) txt = txt & readByte Loop readBytes = readBytes + Len(txt) loop |
1 2 3 4 5 6 7 8 | Dim reader As New System.IO.StreamReader("C:/foo.txt") While Not reader.EndOfStream line = reader.ReadLine() '... End While reader.Close() |
Visual Studio Express is gratis.quote:Op zaterdag 21 juli 2007 12:24 schreef Chandler het volgende:
Ik heb helaas geen VBnet... (jawel, maar weet niet waar, moet toch ook gewoon in vb6 kunnen, zoals bovenstaand maar dan anders...)
Geen idee, ik ben niet zo thuis in die VB6 file handling.quote:Ennuh opzich is mijn code toch wel juist?
1 2 3 4 5 6 7 8 9 10 | Get #freeNum, pointCnt, readByte readBytes = readBytes & Chr(readByte) pointCnt = pointCnt + 1 Debug.Print readByte Debug.Print pointCnt & " - " & fileSize & " - " & Len(readBytes) & vbCrLf Loop While (readByte <> 13 Or pointCnt < fileSize) |
Vreemt. Wat je zou kunnen proberen is in plaats van een Do loop een For loop gebruiken. Dan zou het worden:quote:Op zondag 22 juli 2007 15:50 schreef Chandler het volgende:
Hmm... Lijkt mij toch wel aardig goed te zijn :P
Ik heb mijn code een beetje aangepast en heb dit nu in een loop staan.
[ code verwijderd ]
echter wil de loop niet stoppen als readByte (10 of 13) is :{ Wat doe ik fout? :D
1 2 3 4 5 6 7 8 9 10 | Get #freeNum, I, readByte readBytes = readBytes & Chr(readByte) Debug.Print readByte Debug.Print I & " - " & fileSize & " - " & Len(readBytes) & vbCrLf If readByte = 13 Then Exit For Next I |
1 2 3 4 5 6 7 8 9 10 11 | Dim fso, myFile As Object Dim line As String Set fso = New Scripting.FileSystemObject Set myFile = fso.OpenTextFile("c:foo.txt", forReading) Do While Not myFile.AtEndOfStream line = myFile.ReadLine '... Loop myFile.Close |
1 |
1 |
1 2 3 4 5 6 7 8 9 10 11 12 | Dim strNum As String Dim i As Integer On Error Resume Next For i = 1 To Len(strValue) If IsNumeric(Mid(strValue, i, 1)) Then strNum = strNum & Mid(strValue, i, 1) Next i ExtNum = CInt(strNum) End Function |
Les 1: nooit "on error resume next" gebruiken tijdens debuggen!quote:Op zaterdag 10 mei 2008 14:02 schreef Woeiii het volgende:
Ben bezig met een kleine functie om een getal van 6 aaneensluitende nummers uit een string te halen, maar t wil niet echt lukken:
[ code verwijderd ]
Deze haalt alle getallen uit een lap tekst , maar werkt niet goed hij returned namelijk steeds nul , heeft iemand een oplossing?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | Dim strNum As String Dim i As Integer 'On Error Resume Next For i = 1 To Len(strValue) If IsNumeric(Mid(strValue, i, 1)) Then strNum = strNum & Mid(strValue, i, 1) Next i ExtNum = Val(strNum) 'On Error GoTo 0 End Function |
De truuk is net dat je die code zelf moeten maken.quote:Op dinsdag 7 oktober 2008 10:54 schreef hello_moto1992 het volgende:
Sorry voor de grote kick, maar...
Ik zou graag een programma willen maken dat een rekening bij houdt in een kantine/keet. Je hebt dus een lijstje met namen, en daar achter staat bier, wijn, cola, malibu etc.
In Excel kun je "view code" doen, maar dan staat er niks. Hoe kan dat?
En hoe maak ik het handigste zo'n programma?
Ik kwam er ook achterquote:Op dinsdag 7 oktober 2008 11:07 schreef DaFan het volgende:
Kan je beter in het Excel topic doen.
[EXCEL] Het grote Excel vragen topic, #7
En onder View code is het de bedoeling dat je zelf de code schrijft
vb kan je redelijk simpel met mysql laten comminicerenquote:Op dinsdag 7 oktober 2008 11:19 schreef DaFan het volgende:
In VB is het een stuk lastiger omdat je geen 'database' hebt. Als je het in Excel icm VBA doet heb je gewoon een overzicht waar je idd gewoon een knopje kan drukken achter iemands naam, waarbij hij de waarde opzoekt die het nu is, en er 1 bij optelt. Simpel.
Akkoord maar niet voor een dranklijst en al helemaal niet als je nog nooit VB gebruikt hebtquote:Op dinsdag 7 oktober 2008 21:29 schreef mschol het volgende:
[..]
vb kan je redelijk simpel met mysql laten comminiceren
Als het toch op 1 PC draait zou ik eerder SQLLite of misschien Firebird gebruiken.quote:Op dinsdag 7 oktober 2008 21:29 schreef mschol het volgende:
[..]
vb kan je redelijk simpel met mysql laten comminiceren
1 2 | FileExists = oFile.FolderExists(sFullPath) |
Je gebruikt geen Option Explicit (aan het begin van je code staat in ieder bestand).quote:Op donderdag 20 mei 2010 14:02 schreef Chandler het volgende:
Idd, ik kwam er achter dat een letter qua functienaam niet goed stond en dus geen true/false (boolean) terug stuurde.. wat kun je toch over foutjes heen kijken zeg
1 |
quote:Op donderdag 20 mei 2010 14:26 schreef Chandler het volgende:
-edit-
Ini werkt al
Alles werkt op het maken van directories na...en op een of andere manier kom ik daar niet uit..
Maar ik ga er nu even lekker mee spelen!
VB6 nog? Je weet dat Microsoft inmiddels van haar .net-versies ook gratis versies van de ontwikkelstudio's uitbrengt? Onder andere Visual Basic .net 2008 is gratis te downloaden: http://www.microsoft.com/exPress/quote:Op vrijdag 21 mei 2010 15:53 schreef Chandler het volgende:
Hier te downloaden in source van visualbasic 6
Het mooie van VB.net is dat de syntax onveranderd is maar dat het op sommige punten eenvoudiger is om - bijvoorbeeld met het bestandsysteem - te werken. Om je een voorbeeld te noemen, in vb.net is er standaard een functie aanwezig om te controleren of een bestand bestaat: System.IO.File.Exists(path as string). Dat scheelt, want dan hoef je filesystemobject niet steeds opnieuw te declareren.quote:Op vrijdag 21 mei 2010 17:23 schreef Chandler het volgende:
Ja VB6hoe durf ik hoor ik je nu denken, ach het is voor mij bekender, aangezien ik zelf altijd met QuickBASIC 4.5 heb gwerkt (jaren, jaren jaren geleden!
) en dus simpeler om te begrijpen... En natuurlijk het belangrijkste, het lukt me om er iets mee te bakken!
maar goed, wie weet ga ik ooit eens .net proberen... maar dat zal pas na een volgende herinstal worden
Heb je nog tips voor de huidige code?
1 2 | MsgBox(bestandsinformatie.Extension) |
"vol" lopen van het geheugen?quote:Op zondag 23 mei 2010 11:23 schreef Chandler het volgende:
Nou geheugen valt dus tegen... 50-80mb erg schommelend... Ook gaan de eerste 10.000 bestanden aardig rap maar daarna gaat het steeds slomer... iemand een idee waardoor dit zou kunnen komen?
Leuk om te zien dat het werkt! Je zou i.p.v. "AND" ook "ANDALSO" kunnen gebruiken, dat zal iets in performance schelen. In dit voorbeeld:quote:Op zaterdag 22 mei 2010 16:23 schreef Chandler het volgende:
Dan maar weer een kleine update, zelfde bestand.
Aardig wat ifjes verwijderd.
nu 1 aanroep voor alle fso objecten
meer gegevens in error string.
En een exe toegevoegd... weet niet of dat handig is maar goed :)
Gaat nu zeker een stuk sneller, en volgens mij eet het ook minder geheugen..
1 |
1 |
Grappig dat dat zo erg scheelt :)quote:Op zondag 23 mei 2010 22:01 schreef Chandler het volgende:
Yup, dat was idd het euvel, voor ieder bestand dat na controle op datum geskipt werdt was terug te vinden in de log en dat is met 200k aan bestande niet grappig... nu deze weg gehaalt zit het geheugen gebruik op 5MB en loopt het nu alle bestanden in zo'n 5 minuten langs!!!! ipv een halve dag :D
dat lijkt me vb.net en dat is iets waar de meeste mensen in dit topic allergisch voor zijn.quote:Op maandag 3 januari 2011 19:06 schreef Modus het volgende:
Ik ben met een studieopdracht bezig. Een simpel programmaatje om een soort orderlijst te maken en daarnaast moet je nog een programma maken om die orderlijst te veranderen. Ik moet dus 2 .exe's maken (kan ms ook anders maar het voorbeeld heeft er ook 2).
Min of meer de enige hint die gegeven werd voor het samen gebruiken van die 2 is dat VB (Express in mijn geval) een Process component in de toolbox heeft. Ik heb echter geen idee hoe en wat verder, als ik zo'n ding in mijn eerste programma toevoeg.
In prog 1 zit een knop Edit orderlist die prog 2 laat opstarten. Ik heb echt geen idee wat voor code ik ongeveer zou moeten gebruiken onder die knop om dat voor elkaar te krijgen. En als ik wel code heb, wat is dan het nut van dat component in mijn project??
Verder is dus het idee dat gegevens uit prog 2 weer verwerkt worden in prog 1. Ook geen idee hoe dat zou moeten (variabelen binnen meerdere forms snap ik wel), of gaat dat min of meer 'automatisch' door juist gebruik van dit onderdeel?
Heb hier al wat zitten kijken http://msdn.microsoft.com(...)nostics.process.aspx maar daar word ik niet heel veel wijzer van vooralsnog.
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 28 29 30 31 32 | Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Environment.GetCommandLineArgs.Contains("edit") Then Dim orders As New List(Of String) Dim order As String = Nothing Do order = Console.ReadLine If order <> String.Empty Then orders.Add(order) Loop While Not order = String.Empty MessageBox.Show(orders.Count) Else Dim orderLijst As String() = {"cola", "boter", "kaas", String.Empty} Dim si As New System.Diagnostics.ProcessStartInfo With { .Arguments = "edit", .FileName = Application.ExecutablePath, .RedirectStandardInput = True, .UseShellExecute = False } Dim process = System.Diagnostics.Process.Start(si) process.WaitForInputIdle() For Each order In orderLijst process.StandardInput.WriteLine(order) Next process.StandardInput.Flush() End If End Sub |
Volgens mij is het gewoon de bedoeling dat ze die data in een textfile of DB opslaan. Snap niet dat mensen hier rare oplossingen als communicerende applicaties gaan bedenken. In VB wat in een access DB frutten is triviaal.quote:Op maandag 3 januari 2011 21:28 schreef Core2 het volgende:
Het is dan ook niet zo moeilijk meer om van B naar A te gaan lijkt me. Je kunt dus communiceren via stdin/stdout. Je hebt nog wel wat andere mogelijkheden (named pipes, memory mapped files, tcp/ip, etc) waar je denk ik nog wat te weinig ervaring voor hebt (met alle respect).
Je kunt die opdracht op meerdere manieren interpreteren, ik heb geen idee wat de context is. Er wordt gesproken over het Process object, een orderlijst en twee applicaties die iets met die orderlijst moeten doen. Niet zo gek dat je dan bij communicerende processen uitkomt, maar zou me niks verbazen als ze inderdaad een database oplossing bedoelen.quote:Op dinsdag 4 januari 2011 14:39 schreef Catbert het volgende:
[..]
Volgens mij is het gewoon de bedoeling dat ze die data in een textfile of DB opslaan. Snap niet dat mensen hier rare oplossingen als communicerende applicaties gaan bedenken. In VB wat in een access DB frutten is triviaal.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Dim File_Name As String = "D:\vb08sbs\voorbeelden\899J6\Inzending\899Q6\orders.txt" If System.IO.File.Exists(File_Name) = True Then Dim SplitLineArr() As String, NewTextLine As String Dim objReader As New System.IO.StreamReader(File_Name) Do While objReader.Peek() <> -1 NewTextLine = objReader.ReadLine() SplitLineArr = Split(objReader.ReadLine(), ";") Label5.Text = NewTextLine Label6.Text = SplitLineArr(0) ' Dim index As Integer = OrderListBox.FindString(SplitLineArr(0)) ' If index <> -1 Then ' OrderListBox.Items(index) = NewTextLine ' ArticlePrice = Convert.ToDecimal(Trim(SplitLineArr(2)), New System.Globalization.CultureInfo("en-US")) ' TotalPrice = TotalPrice + (Trim(SplitLineArr(3)) * ArticlePrice) ' End If Loop End If |
Je leest nu door deze code steeds twee regels uit het bestand.quote:Op maandag 1 augustus 2011 21:26 schreef Modus het volgende:
Thanks, had je reply nog niet gezien. Ik heb dat stukje inmiddels ook werkend kunnen krijgen. Ben inmiddels weer iets verder gevorderd.
Nu wat anders, een wat specifieker probleem, dus ms makkelijker om uit te zoeken.
Na het sluiten van App2 laat ik het txt-bestand opnieuw openen, dat moet regel voor regel uitgelezen worden, elke regel moet opgesplitst naar een array en het eerste item van deze array moet als zoekterm gebruikt worden om in de Listbox van App1 het bijbehorende item terug te vinden.
Leek allemaal goed te gaan maar het juiste Listbox.Item wordt niet goed bijgewerkt. Nader onderzoek leert dat die array vullen niet goed gaat, maar ik zie niet wat ik daar fout aan doe. Heb ongeveerd e volgende code:
[ code verwijderd ]
1 2 | NewTextLine = objReader.ReadLine() SplitLineArr = Split(objReader.ReadLine(), ";") |
1 | SplitLineArr = Split(NewTextLine , ";") |
Het enige wat deze Do zegt is dat er code moet worden uitgevoerd zolang er nog tekst te vinden is in het bestand. Met .Peek() kijk je namelijk naar de volgende regel, hij wordt dan nog niet gelezen, dat gebeurd pas met .ReadLine() die je twee keer aanroeptquote:Op maandag 1 augustus 2011 22:46 schreef Modus het volgende:
Is dat zo? Alles wat binnen de Do While-Loop code valt gaat toch over dezelfde regel?
Ah, maar dan gebeurd er dus wel wat anders dan net!quote:Heb de code aangepast zoals je aangeeft en dan gebeurt er nog steeds niks, label5 en 6 blijven leeg.
1 2 3 4 5 6 7 8 9 10 11 12 13 | Do While not objReader.EndOfStream NewTextLine = objReader.ReadLine() SplitLineArr = Split(NewTextLine, ";") Label5.Text = NewTextLine Label6.Text = SplitLineArr(0) ' Dim index As Integer = OrderListBox.FindString(SplitLineArr(0)) ' If index <> -1 Then ' OrderListBox.Items(index) = NewTextLine ' ArticlePrice = Convert.ToDecimal(Trim(SplitLineArr(2)), New System.Globalization.CultureInfo("en-US")) ' TotalPrice = TotalPrice + (Trim(SplitLineArr(3)) * ArticlePrice) ' End If Loop |
Dan is het logisch dat jouw labels leegblijvenquote:Op maandag 1 augustus 2011 23:10 schreef Modus het volgende:
Bij het creëren en vullen van dat tekstbestand wordt idd elke keer een enter aan het einde van een weggeschreven regel toegevoegd, heb het idee dat het daar iets mee te maken heeft ja. Als ik het open en naar het einde van het bestand ga, kom ik uit onder de tekstregels, aan het begin van een nieuwe regel.
Tijdens het wegschrijven (ik neem aan dat dat met een DO of FOR-loop gaat) zou je kunnen kijken of je met de laatste regel bezig bent en als dat het geval is, voeg je geen witregel toe.quote:Is er een manier om dat tijdens het wegschrijven al te voorkomen, of moet je iets doen waardoor je na de laatste regel de nieuwe lege regel weer delete o.i.d.? Die enter moet natuurlijk wel gebruikt worden om telkens regels onder elkaar in het textbestand te kunnen krijgen...?
Dat zal denk ik de makkelijkste optie zijn, zal vanavond eens kijken thuis. Thanks.quote:Op dinsdag 2 augustus 2011 09:54 schreef TallMan het volgende:
Of bij het uitlezen van het bestand kijken of je een lege regel hebt uitgelezen en die niet processen
|
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |