Jag har en textbox där jag skriver viss data, nu är det så att jag vill att datan aldrig ska övergå 64 tecken per rad. En kille tipsade mig lite men försvann sen, nedan är vad han gav mig och jag söker nu er hjälp, delvis för att jag inte vet hur jag ska få till det och plus att jag aldrig har förstått mig på loopar :/. Gjorde en test som verkar fungera. Alldeles för mycket kod för en så enkel sak. Vet inte om det är så mycket kod. mmm det finns det.Men fråga till Hjorten är det viktigt att det blir exakt 64 ? Det får inte vara över 64 tecken, glömde bort att skriva det i mitt första inlägg. Är det logiska ord som måste brytas. ? Det kommer nog aldrig vara så långa ord i datan som ska matas in, men svaret är ja. Hej! > Ska texten i textboxen skrivas till en fil, som det står i inläggets rubrik? <b>> Om man radbryter, ska man då göra det vid 64 utan hänsyn till var i texten det är? <b>Detta tolkar jag som att du vill ha hela ord (bara bryta vid mellanslag)..?</b> Visst jag förstår. > Om 59 är en bokstav, kika bakåt till närmsta mellanslag. Angående enterslagen så tror jag inte det. Känner John Blund knacka på axeln, återkommer under helgen. Hej igen! Tack, men jag vet inte riktigt hur jag ska få in koden i min nuvarande kod. Jag använder inte FSO i min kod. Det här är en del av koden: <code> Funkade finfint, dock ett litet problem som jag inte tänkte på först i min frågeställning, eller senare i tråden. Vid vare radbrytning ska fyra mellanslag läggas till innan texten börjar igen. <code> <b>Efter en koll i min kod så ska raden vara max 61 tecken, MED radbrytningstecken.</b> Det funkar tokfint nu! Dock så blir det åtta tecken på första raden, men det kan jag ändra manuellt. Om du kollar på mitt andra exempel så har jag tagit bort dom första 4 mellanrummen eftersom det kommer 4 genom FixText(). Antar att det är det du har glömt att ändra. Hej!Tvinga radbrytning i fil
"Om din maxlängd/rad på textboxen är tex 50 så tar du left(strData,50), sen hittar du sista spacetecknet i den raden med hjälp av InstrRev(nyasträngen," "), sen, strData = right(strData,len(strData)-len(nyastesträngen)) och sen loopar du det".
Jag står som sagt helt nollställd, och vet inte alls hur jag ska få det här att fungera, så hjälp mottages.Sv: Tvinga radbrytning i fil
Lägg upp en textbox "text1" och prova koden.
<code>
Private Sub BreakText()
Dim TextLen As Integer
Dim MaxLineLen As Integer
Dim Breakpos As Integer
Dim TextToBreak As String
Dim NewText As String
Dim EnterPos As Integer
'Antal tecken per rad
MaxLineLen = 20
TextToBreak = Text1.Text
TextLen = Len(TextToBreak)
If TextLen < MaxLineLen Then
Exit Sub
End If
Do Until Len(TextToBreak) < MaxLineLen
'Kolla om raden är bruten.
EnterPos = InStr(1, Mid(TextToBreak, 1, MaxLineLen + 2), vbCrLf, vbTextCompare)
If EnterPos < 1 Then
'Raden är ej bruten, måste brytas
'Leta upp sista blankslaget
Breakpos = InStrRev(TextToBreak, " ", MaxLineLen, vbTextCompare)
'lägg till rad i ny text
NewText = NewText & Left(TextToBreak, Breakpos) & vbCrLf
'ta bort samma rad från orgtext
TextToBreak = Mid(TextToBreak, Breakpos + 1)
Else
'Raden är redan bruten
'lägg till rad i ny text
NewText = NewText & Left(TextToBreak, EnterPos - 1) & vbCrLf
'ta bort samma rad från orgtext
TextToBreak = Mid(TextToBreak, EnterPos + 2)
End If
Loop
'Lägg till sista delen av texten.
NewText = NewText & TextToBreak
'Skriv tillbaka till textbox.
Text1.Text = NewText
End Sub
</code>Sv:Tvinga radbrytning i fil
Så här skall det i princip lösas.Tycker Jag ;-)
Du kan inte låsa på exakt 64 tecken .Med en Select Case sats plockar du
när ett ord efterföljs av mellanslag, punkt eller komma och
ligger då detta tecken i intervallet 50 - 70 så byter Vi RadSv: Tvinga radbrytning i fil
Hälften är kommentarer.
Antar att det finns bättre sätt att lösa på än mitt.
Utveckla gärna mer hur du menar.Sv:Tvinga radbrytning i fil
Sv: Tvinga radbrytning i fil
Sv:Tvinga radbrytning i fil
Dvs om jag skriner "extraordinarivaktmästarebiträde" så skall det brytas eller ?Sv: Tvinga radbrytning i fil
Sv:Tvinga radbrytning i fil
Frågor:
Ska texten i textboxen skrivas till en fil, som det står i inläggets rubrik?
Eller ska den radbrytas i textboxen?
Ska raderna vara 64 tecken långa MED eller UTAN radbrytningstecken?
Om man radbryter, ska man då göra det vid 64 utan hänsyn till var i texten det är?
Eller ska det brytas "snyggt", t.ex backa till närmaste mellanslag?
//HåkanSv: Tvinga radbrytning i fil
Ja.
> Eller ska den radbrytas i textboxen?
Nej.
> Ska raderna vara 64 tecken långa MED eller UTAN radbrytningstecken?
Efter en koll i min kod så ska raden vara max 61 tecken, MED radbrytningstecken.
> Om man radbryter, ska man då göra det vid 64 utan hänsyn till var i texten det är?
Nej.Sv:Tvinga radbrytning i fil
Nej.</b>
Detta tolkar jag som att du vill ha hela ord (bara bryta vid mellanslag)..?
//HåkanSv: Tvinga radbrytning i fil
Nja, det får dock inte överstiga 61 tecken per rad.
Exempel:
"En gång gick Peter och handlade på ICA Supermarket, han tyckte att det var roligt."
Där ska den bryta flytta ner "tyckte att det var roligt." till nästa rad, om du förstår vad jag menar.Sv:Tvinga radbrytning i fil
Om 59 är en bokstav, kika bakåt till närmsta mellanslag.
//HåkanSv: Tvinga radbrytning i fil
Mnjaa, sista mellanslaget ska det gå till och sen ska texten som kommer efter det ner på nästa rad. En tanke dock, vad händer om jag trycker enter två gånger för att få en ny tom rad, kommer det knasa till någonting?Sv:Tvinga radbrytning i fil
Annars verkar vi vara på samma sida.
//HåkanSv:Tvinga radbrytning i fil
Om ingen annan fixat en lösning innan dess.
Blir lite mer meck, när du vill bryta "ssssnyggt". ;-)
//HåkanSv:Tvinga radbrytning i fil
Kanske det här gör det du vill.
Har bakat in filhantering (då det ska skrivas till fil).
Bara att ta bort eller göra på annat vis.
Vet inte hur du vill använda texten som skrivs till filen.
Som den skrivs ner nu, så kan vissa rader börja med mellanslag (i filen).
Annars kan man ta bort dem, om de inte behövs vid en uppläsning/visning.
Private Sub Save_Click()
Dim iStop As Integer
Dim iCounter As Integer
Dim iRows As Integer
Dim strText As String
Dim mFileSysObj As New FileSystemObject
Dim mFile As File
Dim mTxtStream As TextStream
strText = TextBox.Text
If Len(strText) > 0 Then
Call mFileSysObj.CreateTextFile("C:\Test.txt")
Set mFile = mFileSysObj.GetFile("C:\Test.txt")
Set mTxtStream = mFile.OpenAsTextStream(ForWriting)
iRows = Len(strText) \ 61
If iRows = 0 Then
Call mTxtStream.WriteLine(strText)
Else
For iCounter = iRows To 0 Step -1
If Mid$(strText, 61, 1) = " " Then
Call mTxtStream.WriteLine(Left$(strText, 61))
strText = Mid$(strText, 61)
Else
iStop = InStrRev(strText, " ", 61)
If iStop = 0 Then
Call mTxtStream.WriteLine(strText)
Else
Call mTxtStream.WriteLine(Left$(strText, iStop))
strText = Mid$(strText, iStop)
End If
End If
Next iCounter
End If
Call mTxtStream.Close
End If
Set mFileSysObj = Nothing
End Sub
//Håkan
Sv: Tvinga radbrytning i fil
<code>
Open FileName For Output As #Filenr
Print #Filenr, " totalt: " & txtTotalTime
Print #Filenr, " "
Print #Filenr, " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
Print #Filenr, " "
Print #Filenr, " data:"
Print #Filenr, " "
Print #Filenr, " " 'här vill jag att den radbrytna datan ska läggas in
Close #Filenr
</code>Sv:Tvinga radbrytning i fil
Open FileName For Output As #Filenr
Print #Filenr, " totalt: " & txtTotalTime
Print #Filenr, " "
Print #Filenr, " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
Print #Filenr, " "
Print #Filenr, " data:"
Print #Filenr, " "
Print #Filenr, " " & FixText("Här sätter du in den långa texten som du vill bryta vid 64 tecken. Innehåller meningen många ord så delas den vid lämpligt mellanrum, annars delas den mellan tecken 64 och 65.")
Close #Filenr
Function FixText(ByVal strText As String) As String
Dim tempLine As String
Do Until strText = ""
Do Until Len(tempLine) = 64 Or strText = ""
tempLine = tempLine & Left(strText, 1)
strText = Mid(strText, 2)
If Right(tempLine, 2) = vbCrLf Then
FixText = FixText & tempLine
tempLine = ""
End If
Loop
If InStr(1, tempLine, " ") > 0 Then
strText = Mid(tempLine, InStrRev(tempLine, " ") + 1) & strText
FixText = FixText & vbCrLf & Left(tempLine, InStrRev(tempLine, " ") - 1)
tempLine = ""
Else
FixText = FixText & vbCrLf & tempLine
tempLine = ""
End If
Loop
If Left(FixText, 2) = vbCrLf Then FixText = Mid(FixText, 3)
End Function
</code>
ThomasSv: Tvinga radbrytning i fil
Skrev in följande text: "Testar ett två tre fyra fem sex sju åtta nio tio elva tolv. Ut i skogen bor smurfarna och Gargamel vill äta upp dom. Lala. Hej och hå, ut i skogen dom gå." (Utan citationstecken).
Det ser då ut så här i filen:
<code>
Testar ett två tre fyra fem sex sju åtta nio tio elva tolv. Ut
i skogen bor smurfarna och Gargamel vill äta upp dom. Lala. Hej
och hå, ut i skogen dom
gå.
</code>
Det borde dock se ut så här:
<code>
Testar ett två tre fyra fem sex sju åtta nio tio elva tolv.
Ut i skogen bor smurfarna och Gargamel vill äta upp dom.
Lala. Hej och hå, ut i skogen dom gå.
</code>Sv:Tvinga radbrytning i fil
Open FileName For Output As #Filenr
Print #Filenr, " totalt: " & txtTotalTime
Print #Filenr, " "
Print #Filenr, " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
Print #Filenr, " "
Print #Filenr, " data:"
Print #Filenr, " "
Print #Filenr, FixText("Testar ett två tre fyra fem sex sju åtta nio tio elva tolv. Ut i skogen bor smurfarna och Gargamel vill äta upp dom. Lala. Hej och hå, ut i skogen dom gå.")
Close #Filenr
Function FixText(ByVal strText As String) As String
Dim tempLine As String
Do Until strText = ""
Do Until Len(tempLine) = 64 Or strText = ""
tempLine = tempLine & Left(strText, 1)
strText = Mid(strText, 2)
If Right(tempLine, 2) = vbCrLf Then
FixText = FixText & " " & tempLine
tempLine = ""
End If
Loop
If InStr(1, tempLine, " ") > 0 Then
strText = Mid(tempLine, InStrRev(tempLine, " ") + 1) & strText
FixText = FixText & vbCrLf & " " & Left(tempLine, InStrRev(tempLine, " ") - 1)
tempLine = ""
Else
FixText = FixText & vbCrLf & " " & tempLine
tempLine = ""
End If
Loop
If Left(FixText, 2) = vbCrLf Then FixText = Mid(FixText, 3)
End Function
</code>
ThomasSv: Tvinga radbrytning i fil
Ser nu att jag hade missat den detaljen. Men du får justera koden själv så att antalet tecken stämmer.
ThomasSv:Tvinga radbrytning i fil
Sv: Tvinga radbrytning i fil
ThomasSv: Tvinga radbrytning i fil
Ser att du har en fungerande lösning.
Lägger ändå upp lösningen ihop med din kod.
Så får du se ett sätt att lösa det på.
Jag kanske rörde till det för dig, med fihanteringen och FSO.
Där det står "Text1" skulle namnet på din textbox stå.
Dim iStop As Integer
Dim iCounter As Integer
Dim iRows As Integer
Dim strText As String
Open FileName For Output As #Filenr
Print #Filenr, " totalt: "
Print #Filenr, " "
Print #Filenr, " ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"
Print #Filenr, " "
Print #Filenr, " data:"
Print #Filenr, " "
strText = Text1.Text
If Len(strText) > 0 Then
iRows = Len(strText) \ 61
If iRows = 0 Then
Print #Filenr, " " & strText
Else
For iCounter = iRows To 0 Step -1
If Mid$(strText, 61, 1) = " " Then
Print #Filenr, " " & Left$(strText, 60)
strText = Mid$(strText, 62)
Else
iStop = InStrRev(strText, " ", 61)
If iStop = 0 Then
Print #Filenr, " " & strText
Else
Print #Filenr, " " & Left$(strText, iStop - 1)
strText = Mid$(strText, iStop + 1)
End If
End If
Next iCounter
End If
End If
Close #Filenr
//Håkan