anoniem Geplaatst: 27 januari 2004 Delen Geplaatst: 27 januari 2004 Als beginnerling ben ik bezig met het maken van een sorteer functie met VBA in Word. Het is de bedoeling dat er een aantal tekstbestanden worden gelezen. Deze bevatten altijd 2 regels. Nu wil ik graag dat o.b.v. de eerste regel er nieuwe textbestanden worden weggeschreven waarbij de volgorde van wegschrijven afhangt van de eerste regel van elk bestand. Dit moet namelijk alfabetisch gebeuren. Stel ik heb: testbestand0001.txt, met op regel1: "Bedankt" en op regel2: "100" testbestand0002.txt, met op regel1: "Alvast" en op regel2: "50" Nu wil ik de bestanden weer wegschrijven waarbij alfabetisch gesorteerd wordt op de eerste regel van elk bestand, dus nu zou het resultaat moeten zijn: testbestand0001.txt, met op regel1: "Alvast" en op regel2: "50" testbestand0002.txt, met op regel1: "Bedankt" en op regel2: "100" Het lezen van tekstbestanden lukt uiteraard wel. Ik weet alleen niet hoe ik het voorelkaar krijg om daarna te sorteren. Al veel gezocht maar helaas het juiste antwoord nog niet gevonden. Is er iemand die me op weg kan helpen?? Quote Link naar reactie
anoniem Geplaatst: 27 januari 2004 Auteur Delen Geplaatst: 27 januari 2004 Het komt dus ruwweg neer op het hernoemen van de bestanden. Een ideetje hoe je het zou kunnen aanpakken: Bouw een array op met daarin de waarden van "regel1" en "regel2" Sorteer vervolgens deze array op "Regel1" Maak nieuwe bestanden aan voor elke rij in het array in een andere map bijvoorbeeld. (evt. verwijder je de oorspronkelijke bestanden daarna) Suc6, Quote Link naar reactie
anoniem Geplaatst: 27 januari 2004 Auteur Delen Geplaatst: 27 januari 2004 Ik ga eerst zoeken naar het aantal testbestanden, dit kan namelijk verschillen. Daarna ga ik ze inlezen. Maar dan? Hoe kan ik dan sorteren? [code:1:6a21bb9fd3]Sub alfabet() Dim Regel1(100000) As String Dim Regel2(100000) As String Dim tmp As String Dim i As Integer Dim b As Integer bestanden = "C:\Mijn Documenten\" With Application.FileSearch .NewSearch .LookIn = bestanden .SearchSubFolders = False .FileName = "testbestand" .MatchAllWordForms = True .FileType = msoFileTypeAllFiles If .Execute() > 0 Then aantal = .FoundFiles.Count i = 1 For b = 1 To aantal Open .FoundFiles(b) For Input As #1 Line Input #1, tmp Line Input #1, tmp2 Regel1(i) = tmp Regel2(i) = tmp2 i = i + 1 Close #1 Next b[/code:1:6a21bb9fd3] Of ben ik zo verkeerd bezig. Quote Link naar reactie
anoniem Geplaatst: 29 januari 2004 Auteur Delen Geplaatst: 29 januari 2004 helaas kom ik er nog niet uit... misschien toch iemand die me kan helpen???? Quote Link naar reactie
anoniem Geplaatst: 8 februari 2004 Auteur Delen Geplaatst: 8 februari 2004 Ik ken VBA niet. Je bent volgens mij op de goede weg. Dimensioneer eerst een twee dimensionele array FoundF(b,2) For b = 1 To aantal Open .FoundFiles(b) For Input As #1 Line Input #1, tmp Line Input #1, tmp2 FoundF(b,1) = tmp FoundF(b,2) = tmp2 Close #1 Next b Ik hoop dat VBA een standaard sorteer commando kent (ook voor 2 dimensionele array's natuurlijk) SORT FoundF(),2,1 of iets dergelijks. Het bovenstaande betekent dat op het tweede element opvolgend gesorteerd moet worden. Is dit wat? Of maak ik het van kwaad tot erger? Suc6 Abcott Quote Link naar reactie
anoniem Geplaatst: 11 februari 2004 Auteur Delen Geplaatst: 11 februari 2004 Poe, ben wel benieuwd naar het doel van de applicatie ;) Maargoed alle bestanden tegelijk openen is niet goed voor je resources he? ;) als je veel bestanden hebt wordt dit een hell :lol: Maargoed, een simpel sorteeralgoritme kan als volgt werken: Open een bestand. Vergelijk het eerste karakters van het bestand met de het eerste karakter van een volgend bestand (kan met de < of > operator op karakters) Zet ze daarna in de goede volgorde in de array, als het tweede bestand > is dan het eerste bestand, zet je hem achteraan de array. Open daarna een volgend bestand en vergelijk het eerste karakter met het laatse huidige element uit de array. Is die ook groter, zet hem dan achteraan de array. Is hij kleiner, dan wandel je net zo lang van het EIND naar het BEGIN van de array, totdat er een keer een > uitkomt. Dan zet je hem op die positie, net zolang totdat er geen bestanden meer zijn. De clue is dus om een groter dan vergelijking te maken en die dan op de huidige-positie vergelijking neer te zetten. Zo voorkom je dat je op een slordige manier al die files gaat openen en gaat zitten prutsen ;) Dit is echt een allersimpelst voorbeeld, er zijn een heleboel algoritmen in omloop voor dit soort problemen. Suc6 :) Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen