Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hämta info från texter

Postades av 2002-07-14 20:04:13 - David Grundström, i forum visual basic - allmänt, Tråden har 20 Kommentarer och lästs av 733 personer

Hej!

Jag skulle vilja hämta info från en text som jag har i en txtbox.

1. Antal tecken (utan space)

2. Antal av alla bokstäver (tex. A=2st B=3st osv)

3. Hur gör jag för att byta ut alla A till tex I ? (ska försöka göra ett lätt krypterings program) alla tecken ska bytas till någe annat så det kan ju krocka men hur fixar man så det inte gör det ??


Tack på förhand.
grunkan


Svara

Sv: Hämta info från texter

Postades av 2002-07-14 21:46:08 - John Lundberg

1. antal = Len(Replace(text1.text," ",""))
2. Denna vet jag faktiskt inte, men jag tippar på Instr(text1.text,"A")något...
3. text1.text = Replace(text1.text,"A","I")


// Jompa


Svara

Sv: Hämta info från texter

Postades av 2002-07-14 21:48:39 - Anders Moldin

>1. Antal tecken (utan space)


Dim StrTextLangd As String

Private Sub Command1_Click()
StrTextLangd = Replace(Text1.Text, " ", "")
Label1.Caption = Len(StrTextLangd)
End Sub


2. Antal av alla bokstäver (tex. A=2st B=3st osv)


Private Sub Form_Load()
MsgBox InStr(1, Text1.Text, UCase("A")), vbOKOnly, "A"
MsgBox InStr(1, Text1.Text, LCase("A")), vbOKOnly, "a"
MsgBox InStr(1, Text1.Text, UCase("B")), vbOKOnly, "B"
MsgBox InStr(1, Text1.Text, LCase("B")), vbOKOnly, "b"
'osv...
End Sub



3. Hur gör jag för att byta ut alla A till tex I ? (ska försöka göra ett lätt krypterings program) alla tecken ska bytas till någe annat så det kan ju krocka men hur fixar man så det inte gör det ??

Replace(Strminvariabel, A, I)


'Nu ska man veta att jag är inte bäst, men jag försöker... :)
'Finns säkert bättre sätt!


Svara

Sv: Hämta info från texter

Postades av 2002-07-14 22:37:12 - David Grundström

Hej!

Tack för alla svar !! här kommer lite mer frågor

Molle om jag på fråga 2 vill lista både små och stora i samma hur gör jag då ?? och jag vill ladda in alla svar i vaiablar (antalA, antalB osv..) hur gör jag då ?

Går det att göra 1 utan att texten i text boxen blir ändrad ? typ ladda in den i en variabel?

Sen på 3:an om jag byter ut alla A till I och sedan vill byta alla I till T så kommer de som var A från början ochså bli T men det vill jag ju inte hur fixar jag det ??? det verkar vara det svåraste .....

Tack på förhand
grunkan


Svara

Sv: Hämta info från texter

Postades av 2002-07-14 23:24:38 - Emma Magnusson

Hmmm... lite anmärkningar.

InStr ger inte antalet tecken utan positionen för det första tecknet.
Vill man ta reda på totala antalet får man nog snällt göra en loop och
kolla igenom hela strängen.

ex:

2. Antal av alla bokstäver (tex. A=2st B=3st osv)

private function antalTecken(tecken as string, sokStrang as string) as integer
dim antal as integer, pos as integer

pos = 1
do until pos = 0 and pos < len(sokstrang)
pos = instr(pos, sokstrang, tecken, vbtextcompare)
if pos <> 0 then
antal = antal +1
pos = pos +1
end if
loop

'pos blir 0 om bokstaven inte hittas i resten av strängen
'om bokstaven hittas ska man börja sökningen på efterföljande position
end function

Har inte testat ovanstående men det borde funka

/Emma


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 11:50:20 - Andreas Hillqvist

Fråga 1 - Räkna totalt antal bokstäver:
<code>
Option Explicit

Function LetterCount(Text As String) As Long
Dim Char As String
Dim Index As Long
For Index = 1 To Len(Text)
Char = Mid$(Text, Index, 1)
If LCase$() <> UCase$() Then
LetterCount = LetterCount + 1
End If
Next
End Function

Private Sub Command1_Click()
Debug.Print LetterCount(Text1.Text)
End Sub


</code>
Fråga 2 - räkna tecken:
<code>
Option Explicit

Function CharCount(Text As String) As Long()
Dim Data() As Byte
Dim Result() As Long
Dim Index As Long
ReDim Result(0 To 255)
Data = StrConv(Text, vbFromUnicode)
For Index = 0 To UBound(Data)
Result(Data(Index)) = Result(Data(Index)) + 1
Next
CharCount = Result
End Function

Private Sub Command1_Click()
Dim Index As Long
Dim Result() As Long
Result = CharCount(Text1.Text)
For Index = 0 To 255
If Result(Index) > 0 Then
Debug.Print Chr(Index) & "=" & Result(Index) & "st ";
End If
Next
Debug.Print
End Sub


</code>

Fråga 3 - Kryptera:
<code>
Option Explicit

Private Key() As Byte

Function Kryptera(Text As String, Key() As Byte) As String
Dim Data() As Byte
Dim Index As Long
Data = StrConv(Text, vbFromUnicode)
For Index = 0 To UBound(Data)
Data(Index) = Key(Data(Index))
Next
Kryptera = StrConv(Data, vbUnicode)
End Function

Private Sub Command1_Click()
Text1.Text = Kryptera(Text1.Text, Key)
End Sub

Private Sub Form_Load()
Dim Index As Long
ReDim Key(0 To 255) As Byte
For Index = 0 To 255
Key(Index) = Index
Next

'a(97)=i(105)
Key(97) = 105

'A(65)=I(73)
Key(65) = 73

'i(105)=a(97)
Key(105) = 97

'I(73)=A(65)
Key(73) = 65
End Sub
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 12:13:41 - Anders Moldin

>Molle om jag på fråga 2 vill lista både små och stora i samma hur
>gör jag då ?? och jag vill ladda in alla svar i vaiablar
>(antalA, antalB osv..) hur gör jag då ?


Dim AntalA, AntalB As Integer

Private Sub Form_Load()
AntalA = InStr(1, Text1.Text, UCase("A"))
AntalA = AntalA + InStr(1, Text1.Text, LCase("A"))
MsgBox AntalA
AntalB = InStr(1, Text1.Text, UCase("B"))
AntalB = AntalB + InStr(1, Text1.Text, LCase("B"))
MsgBox AntalB
'osv...
End Sub



>Går det att göra 1 utan att texten i text boxen blir ändrad ? typ ladda in den i en variabel?

Det gör jag ju i mitt exempel.


>Sen på 3:an om jag byter ut alla A till I och sedan vill byta alla I till T så
>kommer de som var A från början ochså bli T men det vill jag ju inte hur
>fixar jag det ??? det verkar vara det svåraste .....

Det där är väl bara enkel matematik.
Om du först ska ändra A till I och sen I till T för du börja med alla I till T och SEN göra A till I:

I --> T
A --> I


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 13:32:29 - Andreas Hillqvist

Om du vill att små och stora boikstäver skall räknas tillsamans skriver du:
<code>
Result = CharCount(UCase(Text1.Text))
</code>
Eller:
<code>
Result = CharCount(LCase(Text1.Text))
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 14:18:47 - Andreas Hillqvist

Om du skriver "Dim AntalA, AntalB As Integer" blir AntalA en variant. Om du anger fjärde argumentet tiil vbTextCompare sökar den inte binärt.<br>
<br>
Du summerar ju bara första förekomsternas position. Om du ska räkna antalet förekomster med InStr. Skriver du på följande sätt:
<code>
Function CountString(Text As String, Find As String, Optional Compare As VbCompareMethod = vbBinaryCompare) As Long
Dim Index As Long
Dim FindLen As Long
FindLen = Len(Find)
Index = InStr(1, Text, Find, Compare)
Do While Index
CountString = CountString + 1
Index = InStr(Index + FindLen, Text, Find, Compare)
Loop
End Function
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 14:46:57 - Niklas Jansson

Skulle nog rekommendera en annan approach. Det tenderar att bli så att man behöver räkna förekomster av alla tecken. Då är det väl bättre att använda (man förutsätter att NumberOf är initierade med nollor):

<code>
Public Sub CountChars (ByVal Text As String, ByRef NumberOf(0 to 255) As Long)
Dim iPos As Long, iAscii As Long
For iPos = 1 to Len(Text) - 1
iAscii = Asc(Mid$(Text, iPos, 1))
NumberOf(iAscii) = NumberOf(iAscii) + 1
Next
End Sub
</code>

En annan metod för att räkna antalet av ett tecken kunde ju vara:
<code>
Public Function CountOf (ByVal Text As String, ByVal Find As String) As Long
CountOf = Len(Text)-Len(Replace(Text, Find, ""))
End Sub
</code>

/Niklas Jansson


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 15:13:12 - Andreas Hillqvist

Om du läser ovan så har jag redan skicka en liknande funktion. Optimerat den något genom att konvertera värdet till en bytarray. Samt att jag istället för att skicka in en parametar, retunerar resultatet i en array.<br>
<br>
Har ett förslag till din andra funktion:<br>
* För att hanter räkning av text som är längre än 1 tecken bör du divedera resultatet med längden på Find.<br>
* Lägg till argument för att ange Compare metod.<br>
Annars är den okej.
<code>
Public Function CountOf(ByVal Text As String, ByVal Find As String, Optional Compare As VbCompareMethod = vbBinaryCompare) As Long
CountOf = (Len(Text) - Len(Replace(Text, Find, "", , , Compare))) / Len(Find)
End Function
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 15:24:21 - Niklas Jansson

>Om du läser ovan så har jag redan skicka en liknande funktion
Sorry, jag ser nu när jag läser tråden igen att det var det du gjorde (och det slog mig också att jag faktiskt såg det innan).

>Samt att jag istället för att skicka in en parametar, retunerar resultatet i en array.
Att returnera en array bör väl inte vara effektivare? Något snyggare kod, kan tyckas, men VB måste ju allokera en helt ny array och initiera denna.

/Niklas Jansson


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 15:31:40 - Andreas Hillqvist

Jepp. Snyggare att retunera array. Tror inte det är effektivare. Funktionen blir mer lätt använd.<br>
<br>
Optimeringen är:
<code>
Dim Char as Byte
Dim Data() As Byte
Dim Index As Long
Data = StrConv(Text, vbFromUnicode)
For Index = 1 to UBound(Data)
Char = Data(Index)

Next


</code>
V.S.
<code>
Dim Char as Byte
Dim Index As Long
For Index = 1 to Len(Text)
Char= Asc(Mid(Text, Index, 1))

Next
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 18:39:24 - David Grundström

ingen som skulle kunna göra mig en jätte tjänst ?

kan någon skapa programet som räknar antal av en bokstav(a-ö) ??
för mitt vb som jag har med mig på min bärbara funkar inte :( har skivorna hemma....

bara en txtbox som man klistrar in texten i sedan en knapp(räkna) så visas antal tecke i en txtbox eller label så här:
A = 3
B = 4
C = 7
osv..

det skulle göra mig jätte glad och det tar nog inte så långt tid för er proffs =)....

tack på förhand
en desperat grunkan


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 19:17:17 - David Emilsson

en fullt fungerande bokstavsräknare:

Private Sub Command1_Click()
Dim txt, bokstav, totalt
txt = Text1.Text
bokstav = 0
For n = 65 To 90
For i = 1 To Len(txt)
If UCase(Mid(txt, i, 1)) = Chr(n) Then
bokstav = bokstav + 1
End If
Next
totalt = totalt & Chr(n) & " = " & bokstav & vbCrLf
bokstav = 0
Next
n = Asc("Å")
For i = 1 To Len(txt)
If UCase(Mid(txt, i, 1)) = Chr(n) Then
bokstav = bokstav + 1
End If
Next
totalt = totalt & Chr(n) & " = " & bokstav & vbCrLf
bokstav = 0
n = Asc("Ä")
For i = 1 To Len(txt)
If UCase(Mid(txt, i, 1)) = Chr(n) Then
bokstav = bokstav + 1
End If
Next
totalt = totalt & Chr(n) & " = " & bokstav & vbCrLf
bokstav = 0
n = Asc("Ö")
For i = 1 To Len(txt)
If UCase(Mid(txt, i, 1)) = Chr(n) Then
bokstav = bokstav + 1
End If
Next
totalt = totalt & Chr(n) & " = " & bokstav & vbCrLf
bokstav = 0

MsgBox totalt
End Sub


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 21:09:02 - David Grundström

du skulle inte kunna göra den fungerande(med txtbox och allt) och sedan compilera den pch lägga upp den ???skulle göra mig jätte glad.

mitt är ju trasigt som jag sa i ett tidigare inlägg (måste ha det nu och jag kommer inte åt min skiva förens nästa helg)

tack på förhand
grunkan


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 21:15:03 - Andreas Hillqvist

Har sammanställt ett exempel med min funktion:
Programarkivet:Räknar antal tecken


Svara

Sv: Hämta info från texter

Postades av 2002-07-15 22:56:39 - David Grundström

TACK SÅ JÄTTE MYCKET !!!!!!!!!!

hade lite otur precis när jag skulle ladda hem programmet(klickade på download länken) så gick pellesoft ner :( så jag fick koppla ner och vänta tills nu ... (sitter på modem just nu)

ett liten (bugg?) jag hittade var att den räknade nyarader 2 gånger... annars var det hur bra som helst precis som jag ville ha det... =)

tack
grunkan *glad*


Svara

Sv: Hämta info från texter

Postades av 2002-07-17 10:10:05 - Andreas Hillqvist

En radbrytnin symboliseras med två tecken 13 - Carier Return Och 10 . Line Feed.<br>
<br>
Du kan ersätta 13 10 med bara 13 eller bara 10:
<code>
Result = CharCount(Reolace(UCase(Text1.Text), vbCrLf, vbCr))
</code>
Eller:
<code>
Result = CharCount(Reolace(UCase(Text1.Text), vbCrLf, vbLf))
</code>


Svara

Sv: Hämta info från texter

Postades av 2002-07-21 20:30:12 - Jonatan Nyqvist

Hej...
Jag löste det där för ett tag sedan hur man byter ut vissa bokstäver, eller ord i en textruta...
Sättet kanske inte är fullt så smidigt, men det fungerar jättebra när det är färdigt...
Jag gjorde nämligen så att jag hade en extra textbox (RichTxtBox) RTF -grej duvet (hoppas jag)... På den rutan var självklart Visible satt till False...
Då kopierade jag texten där bokstäverna skulle bytas ut till RTF-rutan.
Till den så finns det smidiga funktioner som heter Replace, och Find.
Man söker efter ett ord man letar efter, och ersätter det, och söker sedan efter nästa... När det är klart, flyttas den ändrade texten till den vanliga textrutan igen.. Ganska simpelt... Här har du lite av den koden jag använde mej av: (Kopiera den till en modul, och Call:a sedan till funktionen ChangeLetters när du vill byta bokstäverna)

<code>
Private EditNR As Integer
Public AntalNR As Integer
Private TxtFind As String
Private TxtReplace As String

Public Sub ChangeLetters()
AntalNR = 3 'Hur många olika typer av bokstäver det finns du vill byta ut

For EditNR = 1 To AntalNR
CheckInfo 'Kolla vilka som ska bytas ut med vad
goptions = rtfMatchCase
gCount = 0
frmF.EditSagan.SelStart = 0
frmF.EditSagan.SelLength = 0

'frmF = Fönstret där allt händer
'EditF = Textrutan som ska ändrar bokstäver (RTF)
'TxtOriginal = Textrutan som visar resultatet

Do
If frmF.EditF.Find(TxtFind, frmF.EditF.SelStart + frmF.EditF.SelLength, , goptions) = -1 Then
'Ingen bokstav hittad
''cmdFind.Caption = "&Find"
Exit Do
Else
gCount = gCount + 1 'Öka räknaren
frmF.EditF.SelText = TxtReplace 'Gör allt visuellt
End If

Loop
Next
frmF.TxtOrginal.text = frmF.EditF.text
End Sub


Private Sub CheckInfo()
Select Case EditNR 'Jag skriver in 3 exempel på bokstäver som ska bytas ut
Case 1
TxtFind = "I" 'text som ska ändras...
TxtReplace = "O" '...till det här
Case 2
TxtFind = "A"
TxtReplace = "B"
Case 3
TxtFind = "Q"
TxtReplace = "S"
End Select
End Sub
</code>

Jag tror d ska fungera så.. det är nu lätt att lägga till fler bokstäver bara genom att lägga till några "Case" och sedan öka EditNR till så många som finns.. annars blir d fel

/Jonte


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 607
27 953
271 705
581
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies