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


Hjälp igång för ringrostig!

Postades av 2007-03-19 11:20:45 - Mats Adolphsson, i forum visual basic - allmänt, Tråden har 12 Kommentarer och lästs av 1250 personer

Hej!

Jag är tyvärr ingen jättevan VB programmerare och skulle därför behöva lite tips och hjälp med att lösa ett problem.
Min önskan är att skapa ett program som läser in en textfil som kan se ut enl. nedan:

0CF00400 X 8 F8 7D 7D 00 00 FF FF FF 2218.401 R
00EFD100 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.400 R
00EFD200 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.399 R
0CFF5800 X 8 07 00 00 01 67 01 06 00 2218.399 R
0C000011 X 8 00 00 00 FA 00 00 00 00 2218.397 R
0CF00400 X 8 F8 7D 7D 00 00 FF FF FF 2218.391 R
00EFD200 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.390 R
0CFF4800 X 8 F8 7C 30 FF FF FF FF 00 2218.389 R

Nu vill jag att programmet kollar den första 8 tecken långa gruppen (som är en identifierare) och jämför den med ett par bestämda kombinationer. Om denna finns med så skrivs hela raden ut.
Ur den 8 tecken långa första kombinationen så är det de fyra ”mittersta” tecknen (de på position 3,4,5 & 6) som skall jämföras med ett par 4 tecken långa bestämda kombinationer.

Ex. på bestämda kombinationer som jag är intresserad av är:
F004
F006
EFD2
FFFF
I detta fall så skulle rad 1, 3, 6 & 7 skrivas ut.

Dessa 4 tecken långa kombinationer som jag är intresserad av önskar jag kunna ändra/lägga till/ta bort. Har man dessa då kanske också i en separat textfil!?

Eftersom jag är rätt ringrostig när det gäller programmering och VB så skulle jag vara otroligt tacksam om någon skulle kunna hjälpa mig igång med tips/förslag på detta.

Tack på förhand!
/Mats


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-19 11:27:05 - Andreas Hillqvist

Vad har du för separator mellan kolumnerna? ÄR det fast bredd eller ett avskiljande tecken så som tab?


Svara

Sv:Hjälp igång för ringrostig!

Postades av 2007-03-19 11:45:18 - Mats Adolphsson

Först kommer tre mellanslag.
Sedan den 8 tecken långa "identifieraren".
Ett mellanslag.
Ett X.
Tre mellanslag.
En 8.
Tre mellanslag.
Därefter följer 8st 2-tecken långa grupper med två mellanslag mellan varje grupp.
Tre mellanslag.
Kombination "4 siffror.3 siffror"
Ett mellanslag.
R

Hoppas detta klargör denna "röriga" textfil.

/M


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-19 13:37:01 - Andreas Hillqvist

Det rör sig om fastbredd.
Mitt tipps är att använda ADO och Access, JET OLEDB providern.
På så sätt kan du öppna filen som ett recordset.

För att göra detta behöver du definiera en Schema.ini:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/odbc/htm/odbcjetschema_ini_file.asp

Ett exempel på detta är:
[data1.txt]
ColNameHeader=False
Format=FixedLength
DecimalSymbol=,
Col1=Id Char Width 11
Col2=XFactor Char Width 2
Col3=MagicNumber Char Width 4
osv...

Så här öppnar du den:

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset

	rsTable.Open "SELECT * FROM " & TableName, Connection
Dim path As String

	path = App.Path 'Katalog där Schema.ini ligger tillsammans med textfilerna
    
	Set con = New ADODB.Connection
	con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" + _
	         "Extended Properties='Text';" + _
	         "Data Source=" & path & ";"

	rs = New ADODB.Recordset
	rs.Open "SELECT * FROM [data1.txt]" , con

	Do until rs.EOF
		rs.MoveNext
	rs.Loop

	rs.Close
	con.Close


Du kan då manuellt filtrerar ut posterna med en IF sats i loopen eller använda fileter egensapen på recordsetet.


Svara

Sv:Hjälp igång för ringrostig!

Postades av 2007-03-19 15:50:06 - Mats Adolphsson

Oj, detta lät komplicerat för mig då jag inte är direkt bekant med ADO, Access.....

Vore det idé att ge sig på detta "främmande" eller finns det någon (för mig) smidigare lösning med enbart VB6?

MVH
/M


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-19 16:50:15 - Andreas Hillqvist

Access och ado brukar vara bekant för det flesta.

Kod för att loppa igenom en fil:

Private Sub Form_Load()
Dim FileNo As Long
Dim FileName As String
Dim row as String
    FileName = App.Path & "\data.txt"
    FileNo = FreeFile()
    Open FileName For Input As FileNo
    Do Until EOF(FileNo)
        Line Input #FileNo, row
        '....
    Loop
    Close FileNo
End Sub

Om filen inte kommer att förändras så kan du använda följande knep för att dela upp data i kolumner:
Private Type RowCombined
    data As String * 60
End Type

Private Type RowSplitt
    Id As String * 11
    XFactor As String * 2
    MagicNumber As String * 3
    data(7) As String * 4
    HighPart As String * 6
    LowPart As String * 4
    BFactor As String * 2
End Type

Private Sub Form_Load()
Dim FileNo As Long
Dim FileName As String
Dim row As RowCombined
Dim data As RowSplitt
    FileName = App.Path & "\data.txt"
    FileNo = FreeFile()
    Open FileName For Input As FileNo
    Do Until EOF(FileNo)
        Line Input #FileNo, row.data
        LSet data = row
        '...
    Loop
    Close FileNo
End Sub


Att filtrerar och så anser jag trivialt då det är en if-sats.


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-20 10:13:36 - Johan Forsberg

Hej mats! Vi börjar känna varandra vid det här laget (jag är main i en del andra forum där du postat tidigare) :P

I detta exempel måste du skapa en listbox (standardnamn List1).
Ytterligare en metod i VB (med dynamisk minnesallokering):

Dim strSearch() As String
Dim strKey() As String

Private Sub SearchFor(strFil As String)
    Dim i As Integer
    
    Open strFil For Input As #1
        Do Until (EOF(1))
            ReDim Preserve strKey(i)
            Line Input #1, strKey(i)
            i = i + 1
        Loop
    Close #1
End Sub

Private Sub SearchIn(strFil As String)
    Dim i As Integer
    
    Open strFil For Input As #1
        Do Until (EOF(1))
            ReDim Preserve strSearch(i)
            Line Input #1, strSearch(i)
            i = i + 1
        Loop
    Close #1
End Sub

Private Sub Form_Load()
    Dim i As Integer, j As Integer

    SearchIn ("c:\data.txt")
    SearchFor ("c:\keys.txt")
    
    For i = 0 To UBound(strSearch)
        For j = 0 To UBound(strKey)
            If Mid(strSearch(i), 3, 4) = strKey(j) Then
                List1.AddItem strSearch(i)
            End If
        Next j
    Next i
End Sub


Man hade faktiskt kunna göra detta helt utan att behöva utnyttja extra minne för raderna (förutom de två variablerna som läser en rad) (en metod jag visade dig i C förut).

Man kunde ha läst in båda filerna samtidigt och stegat igenom, sedan börjat om i nyckelfilen och läst igen (kommer att läsas n antal gånger n = antal rader). Den metoden kräver mindre minne men är inte så effektiv.

Om du vill ha radnummer lägger du till i+1 (eftersom index börjar med 0) i ListBoxens AddItem metod.


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-20 10:23:04 - Johan Forsberg

Om du vill göra om programmet så att det söker efter vad som helst, och inte bara 4 tecken (med början från och med tecken 3), så kan du använda InStr.

Formatet på InStr är:
Instr([start], "sträng att söka i", "sträng att söka efter", [Sökmetod]).
Den returnerar ett heltal större än noll (0) om söksträngen påträffas i den andra (som indikerar vilken position den substrängen börjar på i söksträngen).

Klamrarna [ och ] indikerar att den parametern är optional, alltså frivillig att bifoga.

Exempel:
InStr("hejsan", "hej") returnerer 1 eftersom stängen "hej" finns i strängen "hejsan", och den fanns från och med position 1.


Svara

Sv:Hjälp igång för ringrostig!

Postades av 2007-03-20 12:45:19 - Sven Åke Persson

Hej tycker det är kul att sitta och pyssla med sådana här problem.
Om du gör ett projekt med detta kodexempel, lånat detaljer från grabbarna ovan.
Så får du en Temp.txt som innehåller dom rader du vill bearbeta.
Det får Vi komma till när du fått detta att funka. Lägg ditt projekt med input-Hexfil.txt i en egen mapp.
Börja med att tillverka en mapp,lägg upp en Command1 button och spara projektet As i den mappen.
Sen klistrar du in denna kod i button och kör.
<code>
Option Explicit
Private Sub Command1_Click()
Dim FileNum As Long, FileNum2 As Long
Dim FileName As String, FileName2 As String
Dim row As String, textRow() As String ' array
'Namnet på din hexfil här,skall ligga i samma mapp som projektet
FileName = App.Path & "\HexOrginal.txt"
'Namnet på din bearbetade utfil här. Samma mapp som projektet.
FileName2 = App.Path & "\Temp.txt"
FileNum = FreeFile
Open FileName For Input As FileNum
FileNum2 = FreeFile
Open FileName2 For Output As FileNum2
Do Until EOF(FileNum)
Line Input #FileNum, row
row = Trim$(row) 'ta bort onödiga space
textRow = Split(row, " ") 'space
If InStr(textRow(0), "F004") _
Or InStr(textRow(0), "F006") _
Or InStr(textRow(0), "EFD2") _
Or InStr(textRow(0), "FFFF") Then
Print #FileNum2, row
End If
Loop
Close #FileNum
Close #FileNum2
End Sub
</code>


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-20 13:02:12 - Mats Adolphsson

Hej (igen till dig main som återigen har hjälpt mig)!

Det finns många sätt att lära sig på, och detta är helt klart ett. Man börjar förstå och komma in i tankesätten mer och mer efter alla tips och förslag jag har fått från er alla via forum, det hade aldrig gått utan er välvilja, hjälpsamhet och framför allt kunskap. Tackar och bockar!

Jag kommer komma hem imorgon och har då möjlighet att pröva och sätta mig in i era förslag ordentligt, men det ser ju grymt ut! Det ska bli spännande att få se hur det fungerar ihop med mina filen och önskemål på resultat!

Stort TACK igen!

/M


Svara

Sv: Hjälp igång för ringrostig!

Postades av 2007-03-20 16:41:29 - Andreas Hillqvist

JAg förstår inte varför ni söker igenom hela raden om ni vet vilken position värdet finns på?
JAg ser det som ineffektivt och möjlighet att ge felträffar.


Svara

Sv:Hjälp igång för ringrostig!

Postades av 2007-03-20 18:20:33 - Sven Åke Persson

0CF00400 X 8 F8 7D 7D 00 00 FF FF FF 2218.401 R
00EFD100 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.400 R
00EFD200 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.399 R
0CFF5800 X 8 07 00 00 01 67 01 06 00 2218.399 R
0C000011 X 8 00 00 00 FA 00 00 00 00 2218.397 R
0CF00400 X 8 F8 7D 7D 00 00 FF FF FF 2218.391 R
00EFD200 X 8 3D 3D 3D 3D 3D 3D 3D 3D 2218.390 R
0CFF4800 X 8 F8 7C 30 FF FF FF FF 00 2218.389 R

hm.... jag vet inte vilken position värdet finns på.
Jag undersöker bara dom 8 första tecknen , se Split raden.


Svara

Sv:Hjälp igång för ringrostig!

Postades av 2007-03-22 01:40:40 - Johan Forsberg

Så är dock inte fallet med If Mid(strSearch(i), 3, 4) = strKey(j).

Men det kan ju vara bra att utforma programmet mer dynamiskt så att om man någon gång skulle vilja använda det till att t.ex söka efter valfria substrängar så kan man lätt ändra raden ovan till instr istället.


Svara

Nyligen

  • 17:03 Getmancar your go-to carsharing
  • 14:07 Games
  • 17:54 Vegastars New Zealand
  • 16:56 Verde Casino Danmark
  • 13:54 Vegastars: Top Australian Online C
  • 21:28 Chicken Road Casino Game
  • 21:21 1xBet Promo Code 2025
  • 18:37 Remove the bumper in AUDI

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 570 994
27 965
271 785
1 398
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