Hoi,
Ik heb als eerste een paar op/aanmerkingen op de eerste code die je gepost hebt:
- De "Format" die je erin hebt staan doet volgens mij helemaal niks omdat je het resultaat nergens opslaat
- Afronden kan ook met "Math.Round"
- Ik weet niet precies hoe je het aantal regels bepaalt, maar in de code die ik je al gegeven had is er een hele simpele manier om het aantal regels te bepalen: de lengte van de array is gelijk aan het aantal regels.
Als ik het zelf zou maken zou ik op het volgende uitkomen (gebaseerd op mijn vorige code, dus jouw aanpassingen zitten er niet in)(en ik heb het niet getest):
[CPP] ''//Openfiledialog aanmaken
Dim fd As New OpenFileDialog
''//Title en Filter instellen
fd.Title = "Open bestand..."
fd.Filter = "Alle bestanden (*.*)|*.*"
''//De dialog weergeven
Dim Result As DialogResult = fd.ShowDialog()
If Not Result = DialogResult.OK Then
''//Als het resultaat niet OK is, stoppen
MsgBox("Geen invoer, het programma herstart.")
Application.Restart()
Exit Sub
End If
''//De bestandsnaam in een variable zetten
Dim strFileName As String = fd.FileName
''//Maak een stream aan om het bestand te kunnen gebruiken
Dim Stream As New IO.FileStream(strFileName, IO.FileMode.Open)
''//Maak een reader aan om het bestand te kunnen openen
Dim Reader As New IO.StreamReader(Stream)
''//Sla de gehele inhoud op in een variable
Dim Content As String = Reader.ReadToEnd
''//Zodat je de reader en de stream zo snel mogelijk weer kan sluiten
Reader.Close()
Stream.Close()
''//Zet alle regels in een array
Dim OldLines() As String = Content.Split(vbCr)
''//Hierin gaan we alle nieuwe regels zetten
Dim NewLines As New List(Of String)
''//Om te bepalen of er al een nieuwe regel in moet
Dim MaxCounter As Integer = Math.Round(OldLines.Count / 100, 0)
''//Een extra counter om bij te houden of we weer MaxCounter regels gehad hebben
Dim Counter As Integer = 0
''//Loop door alle oude regels heen
For i As Integer = 0 To OldLines.Count - 1 Step 1
If Counter = MaxCounter Then
''//Als de counter MaxCounter is moet er een extra lijn in
NewLines.Add("TextToAdd")
''//En moet de counter weer naar 0
Counter = 0
End If
''//En de oude lijn moet er sowieso weer in
NewLines.Add(OldLines(i))
''//En de counter moet 1 omhoog
Counter += 1
Next
''//Een list (of array) kunnen we niet naar een tekstbestand schrijven
''//dus we maken er weer een string van
Dim NewContent As String = Join(NewLines.ToArray, vbCr)
''//Om te schijven maken we weer een stream aan, alleen zorgen we nu
''//meteen dat het bestand helemaal leeg is ("IO.FileMode.Truncate")
Stream = New IO.FileStream(strFileName, IO.FileMode.Truncate)
''//En nu moeten we schrijven, dus geen reader maar een writer
Dim Writer As New IO.StreamWriter(Stream)
''//Het schrijven zelf
Writer.Write(NewContent)
''//En weer sluiten
Writer.Close()
Stream.Close()
MsgBox("Klaar!")[/CPP]
Dan voor de tweede code:
Waar heb je dat precies vandaan? Of heb je zelf die comment erin gezet?
Voor de error moet je misschien even hiernaar kijken:
http://msdn.microsoft.com/en-us/library/59bz1f0h(v=vs.90).aspx. Daarin staat precies wat de Format functie doet.
Kijk dan ook even naar wat je als style gebruikt. Dat komt in je code niet overeen met het voorbeeld. En dan vraag ik me ook nog af of het niet makkelijker is om te checken of er een "Z" in de regel staat. Maar het hangt van de andere regels af of dat werkt. (Als er in de andere regels ook "Z"-tekens voorkomen in een andere context zou het kunnen dat checken voor een "Z" niet werkt).
En dan valt mij het volgende lijntje nog op:
Code:
arraycontrole = Join(Array.ToArray, vbCr)
Hier maak je weer één string van alles wat er in het bestand staat... Dan kan je toch makkelijker (ipv het per regel uitlezen) het volgende gebruiken:
Code:
Dim Tekstbestand As System.IO.TextReader = New System.IO.StreamReader(fd.FileName)
Dim arraycontrole As String = Tekstbestand.ReadToEnd()
Of is het de bedoeling dat het samengaat met de code voor het toevoegen van de lijntjes?
En dan heb ik nog één vraag over:
Waarom zet je de hele inhoud van het bestand in een string en ga je die vervolgens gebruiken om de hoogte te berekenen? Waarom doe je dat niet gewoon per regel en tel je alles bij elkaar op?
MartinJM