Hej Jag gjorde en liten funktion som ersätter en eller flera space/tab med ett pipe-tecken, dock inte vi befinner oss inom citattecken. Funktionen är uppbyggd som en tillståndsmaskin, där tillstånd 0 är startposition, 1 är när vi hittat ett space/tab och kollar om vi hittar fler, samt state 2 är om vi befinner oss inom citattecken. 99 var tänkt som ett felläge t ex om man hittar ogiltiga tecken el dyl... HejBena ut en sträng i VB
Jag försöker skapa en funktion för att importera SIE filer till en Access databas.
En SIE fil är en vanlig textfil där raderna börjar med, ex #VER för att indikera att det är en verifikation som skall börja läsas in. Andra entiteter i filen börjar med ex #RAR osv för att identifiera vad man läser in.
Ordningen i en rad är konstant enligt SIE standard, problemet är att det finns utrymmer för uppdelning på raden. En #VER rad består av följande information Verserie, Vernummer, Verdatum och Vertext.
Exempel
#VER 1 1 20080101 "Kundfordringar"
Problemet är främst två, dels att mellanrummet mellan varje entitet kan utgöras av X antal mellanslag eller X antal TAB. Dessutom så kan alla entiteter förutom #VER och Vertext (sista) sitta innanför
"-tecken. Den sista skall sitta inom " =)
Har någon ett bra förslag att bena upp en sådan rad så att man kan plocka ut varje del oavsett antal X och oavsett om entiteten sitter mellan "-tecken?
Stort Tack på förhand!
/PontusSv: Bena ut en sträng i VB
Därefter borde du kunna göra en enkel Split() på pipetecknet för att splitta upp strängen i dess beståndsdelar.
Jag skrev funktionen i VB.Net så vill du ha den i VB6 så får du ersätta t ex Remove och Insert med motsvarande strängoperationer plus några andra mindre justeringar. Jag har inte VB6 på min maskin tyvärr.
Exempel: Strängen
#VER 1 1 20080101 "Kundfordringar med mera"
skulle bli
#VER|1|1|20080101|"Kundfordringar med mera"
och efter splitten får du följande strängar
#VER
1
1
20080101
"Kundfordringar med mera"
<code>
Public Function ReplaceSpaces(ByVal text As String) As String
Dim pos As Integer = 0
Dim c As Char
Dim state As Integer = 0
Do While True
If pos = text.Length Then Exit Do
c = text(pos)
Select Case state
Case 0 ' Replace first space or tab with a pipe |
If c = Chr(9) Or c = Chr(32) Then
text = text.Remove(pos, 1).Insert(pos, "|") ' Ersätt space/tab med pipe
state = 1
ElseIf c = Chr(34) Then
state = 2
End If
Case 1 ' Keep removing more spaces and tabs
If c = Chr(9) Or c = Chr(32) Then
text = text.Remove(pos, 1)
pos -= 1 ' Minska pos då vi tagit bort ett tecken
ElseIf c = Chr(34) Then
state = 2 ' Här startar ett citat
Else
state = 0
End If
Case 2 ' We are inside a qoute
If c = Chr(34) Then
state = 0 ' Here the quote ends
Else
' Do nothing
End If
Case 99
Throw New Exception("Fel!")
End Select
pos += 1
Loop
Return text
End Function
</code>Sv:Bena ut en sträng i VB
Stort tack för iden och kodförslag. Skall "översätta" det och återkommer om hur det gick.
Mvh
Pontus