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


Läsa från textfil

Postades av 2008-03-16 15:45:55 - Pontus Kjellberg, i forum vb.net, Tråden har 21 Kommentarer och lästs av 1010 personer

Hej!

Vill läsa data från några textfiler. Det fungerar bra med StreamReader.
Läser en rad i taget, splittar den, och ser sedan om mitt sökord finns i raden.
Om det gör det så.. ja då ska jag använda den raden/raderna av data lite senare.

Problemet är att det tar lite tid att läsa raderna i filen.
Det handlar om cirka 50000 rader och det tar 13-15 sekunder.
Eftersom jag vet att ett annat program (inte mitt) använder sig av samma filer
och finner det man söker efter mycket snabbt, på millisekunder, så finns det
såklart ett bättre sätt än det jag gjort.

Tror att man borde skapa index på något sätt, kanske i en separat fil med data från de andra
textfilerna, för att kunna söka mycket snabbare.
Inte vet jag hur eller om jag ens är på rätt spår.

Är jag det, och hur går det till i så fall eller finns det något annat sätt?

/Pontus


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:07:32 - Johan Djupmarker

Visa gärna lite kod på hur du gör så är det lättare att se om det finns bättre sätt. Du skriver att du splittar raden, låter onödigt om du bara ska kontrollera om ett ord förekommer...

/Johan


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:07:42 - Johan Djupmarker

oops, fick ett 500-fel vid postning och trodde inte det sparats...


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:07:49 - Johan Djupmarker

.


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:07:56 - Johan Djupmarker

.


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:08:01 - Johan Djupmarker

.


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:09:14 - Lars Gottfridsson

Det finns många sätt att lösa det här på.

Berätta lite om:

Vad är det för filer?
Ändras dom eller är dom statiska?

Håller med Johan att det verkar onödigt att splitta raderna i förväg.
Om sidorna är statiska så kan man även trycka in dom i en databas.





Svara

Sv: Läsa från textfil

Postades av 2008-03-16 17:09:52 - Lars Gottfridsson

Oops! dubbelpost jag med!
fick följande felmeddelande:


500- Ett internt fel har uppstått
Felet har uppstått i filen: /communicate/forum/edit.aspx

Sidan har utfört ett fel och avbrutits. Felet rapporteras nu automatiskt till oss.

Vi ber om överseende och rättar till detta problem fortast möjligt. Vänligen prova igen om en stund för att se om felet är avhjälpt. Tack för visat tålamod.







Svara

Sv:Läsa från textfil

Postades av 2008-03-16 17:28:05 - Pontus Kjellberg

Visar här exempel på hur filerna ser ut.
Innehållet i varje fil är givetvis mycket större!

I ex. AIRPORT.TXT söker jag efter den andra delen i raden, ESSA (se nedan).
Finns det, vilket det gör, så ska jag ta hand om det som tillhör just ESSA.
Det får jag lösa senare.

Exempel på innehållet i AIRPORTS.TXT

A|ESSA|STOCKHOLM ARLANDA|59651944|17918611|137
R|01L|6|10830|1|109900|6|59637256|17913225|98|300|56
R|01R|6|8202|1|109350|6|59626397|17950742|137|300|51
R|08|72|8202|1|109550|72|59658419|17936133|108|000|50
R|19L|186|8202|1|111350|186|59648467|17958747|98|300|51
R|19R|186|10830|1|110700|186|59666403|17923767|118|300|51
R|26|252|8202|1|110100|252|59663897|17979153|124|300|53

A|ESSB|STOCKHOLM BROMMA|59354444|17942222|47
R|12|121|5472|1|110300|121|59358669|17929642|46|350|51
R|30|301|5472|1|109700|301|59350075|17953658|45|350|36

A|ESSD|BORLANGE|60422222|15515000|503
R|14|129|7579|0|0|0|60429089|15499878|503|000|50
R|32|309|7579|1|109500|309|60415097|15530839|493|300|55





I WAYPOINT.TXT är det den första delen jag vill söka i. Ex. DEVIL
som också förekommer flera gånger.

Exempel på innehållet i WAYPOINTS.TXT

DETSI|51976667|4220278|EH
DETSO|58600000|14264361|ES
DETSU|-1470000|21386667|FZ
DETTA|38656181|-108119281|K2
DETUR|48939167|953056|LF
DETUS|55022806|12999667|ES
DETUX|-20000000|14308333|FY
DETVE|43089511|-76310367|K6
DEUCA|-26646167|-47039833|SB
DEUCE|40643067|-73412783|K6
DEUSO|40968417|-80218169|K6
DEUTZ|39320189|-76542142|K6
DEVAC|34618081|-87435167|K7
DEVAL|50856944|1466667|EG
DEVAY|39237264|-81951147|K5
DEVBI|60715278|-8768333|EG
DEVEC|36068406|-105225497|K2
DEVEL|54730833|15748056|EP
DEVER|37853439|-89357144|K5
DEVID|89000000|-168973333|UO
DEVIL|-26475000|-52039333|SB
DEVIL|38569781|-82873908|K5




I sista exemplet NAVAIDS.TXT är det åter den första
delen som jag söker i ex. ARS eller NS o.s.v.

Exempel på innehållet i NAVAIDS.TXT

ARS|ALTO RIO SENGUERR|310000|0|0|195|-45016389|-70801111|0|SA
ARS|ARDROSSAN|115800|1|0|195|-34416667|137893333|0|YM
ARS|ARDROSSAN|398000|0|0|195|-34414167|137923056|0|YM
ARS|AROS|112800|1|1|195|59586194|16650389|50|ES
ART|WATERTOWN|109800|1|1|195|43952031|-76064617|370|K6
ARU|ALTURAS|215000|0|0|195|41471917|-120557417|0|K2
ARV|ARBOR VITAE|221000|0|0|195|45926142|-89729342|0|K5
ARV|ARVIDSJAUR|109350|0|1|195|65597778|19262861|1276|ES
ARW|NADOR ARWI|355000|0|0|195|34989664|-3044167|0|GM

NS|NELSON|116400|1|1|195|-41301694|173222533|20|NZ
NS|NELSPRUIT|480000|0|0|195|-25490719|30919069|0|FA
NS|NIAMTOUGOU|260000|0|0|195|9701583|1063139|0|DX
NS|NAMSANG|240000|0|0|195|20885556|97736944|0|VY
NS|NANXIONG|333000|0|0|195|25096667|114275000|0|ZG
NS|MARY LOM RW36L|480000|0|0|195|37571667|61898056|0|UT
NS|NARYN|691000|0|0|195|41166667|72166667|0|UA
NS|NIS|255000|0|0|195|43303444|21825028|0|LY
NS|NAKASHIBETSU|265000|0|0|195|43521111|144749444|0|RJ
NS|NIORT SOUCHE|329000|0|0|195|46340583|-300167|0|LF
NS|ULAN UDE|718000|0|0|195|51831667|107630000|0|UI
NS|MALMO|351000|0|0|195|55611667|13363333|0|ES
NS|NARSAQ|404000|0|0|195|60900000|-46016667|0|BG
NS|REYKJAVIK-NES|370000|0|0|195|64133889|-21961667|0|BI
NS|ESNS ILS/CAT I|109500|0|0|195|64627972|21051306|122|ES
NS1|SKOVDE|384000|0|0|195|58525583|14007500|0|ES



Filerna är normalt statiska med kommer att uppdateras ibland.
Detta sker manuellt eller åtminstone med min vetskap, alltså
inte helt plötsligt.

############################################

Som svar till Johan i samma inlägg som till Lars så är det så här jag gör
för att söka, i detta fall, waypoints.txt.

Dim linein As String
Dim resultat() As String
Dim oRead As StreamReader
oRead = File.OpenText("J:\waypoints.txt")

While oRead.Peek <> -1
linein = oRead.ReadLine()
resultat = linein.Split("|")
If resultat.Length >= 3 Then
If resultat(0) = txtSökord.Text Then
Debug.Print(linein) 'För att visa det rader som hittats.
End If
End If
End While

oRead.Close()

/Pontus


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 19:18:32 - Johan Djupmarker

Testa om det går snabbare såhär:

        Dim linein As String
        Dim resultat() As String
        Dim oRead As StreamReader
        oRead = File.OpenText("J:\waypoints.txt")

        While oRead.Peek <> -1
            linein = oRead.ReadLine()
            If linein.Contains(txtSökord.Text & "|") Then
                Debug.Print(linein) 'För att visa det rader som hittats.
            End If
        End While

        oRead.Close()


/Johan


Svara

Sv:Läsa från textfil

Postades av 2008-03-16 19:29:26 - Pontus Kjellberg

Hej Johan!

Nej det tog precis lika lång tid.

/Pontus


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 20:39:15 - Lars Gottfridsson

Hur många textdokument rör det sig om?
Hur många körningar ska du gör per dag?
Vet du var i varje rad det eftersökta värdet skall sökas (per textdokument) ?
Är du nöjd med ditt sexliv? ( kan ev. sakna relevans för uppgiften)
Vet du hur långt ett "värde" kan bli som längst? (mellan pipe-tecknen?

Det jag är ute efter lite, är att ev. formatera till databasformat.


Svara

Sv:Läsa från textfil

Postades av 2008-03-16 20:52:54 - Johan Djupmarker

Borde varit "If linein.StartsWith(txtSökord.Text) Then" istället, men det gör nog inte större skillnad. Får du många träffar? Om du får det kan du testa att skriva raderna till en fil istället, skrivning till Debug-fönstret är ganska långsamt.

/Johan


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 20:55:34 - Pontus Kjellberg

Jag använder bara debug just nu.
Nej det lär inte bli så många träffar.
Kanske ett tiotal som mest, vanligare är nog en eller några enstaka träffar.


Svara

Sv:Läsa från textfil

Postades av 2008-03-16 21:21:07 - Pontus Kjellberg

---Hur många textdokument rör det sig om?
Antalet är tre-fyra stycken.

---Hur många körningar ska du gör per dag?
Det blir inte många alls.

---Vet du var i varje rad det eftersökta värdet skall sökas (per textdokument) ?
I airport.txt så är det det andra. som innehåller fyra tecken.
Exempel ESSB eller ESSD i nedan exempel
A|ESSB|STOCKHOLM BROMMA|59354444|17942222|47
R|12|121|5472|1|110300|121|59358669|17929642|46|350|51
R|30|301|5472|1|109700|301|59350075|17953658|45|350|36

A|ESSD|BORLANGE|60422222|15515000|503
R|14|129|7579|0|0|0|60429089|15499878|503|000|50
R|32|309|7579|1|109500|309|60415097|15530839|493|300|55


I waypoints.txt är det första som innehåller fem tecken.
Exempel DEVID eller DEVIL nedan.
DEVER|37853439|-89357144|K5
DEVID|89000000|-168973333|UO
DEVIL|-26475000|-52039333|SB
DEVIL|38569781|-82873908|K5

I navaids.txt är det det första som innehåller tyvå till tre tecken.
Exempel ARV eller NS nedan
ARV|ARVIDSJAUR|109350|0|1|195|65597778|19262861|1276|ES
ARW|NADOR ARWI|355000|0|0|195|34989664|-3044167|0|GM

NS|NELSON|116400|1|1|195|-41301694|173222533|20|NZ
NS|NELSPRUIT|480000|0|0|195|-25490719|30919069|0|FA
NS|NIAMTOUGOU|260000|0|0|195|9701583|1063139|0|DX

---Vet du hur långt ett "värde" kan bli som längst? (mellan pipe-tecknen?
Nja, lite svårt att svara på men uppskattar det till max 25 tecken, oftast färre.

Som jag skrev i första inlägget så finns det redan ett program som söker mycket snabbt.
Har därifrån funnit en fil där innehållet är enligt nedan. OBS! Visar bara en mycket liten del
av innehållet här! Filen skapas första gången man startar programmet och antar innehållet
kommer från de andra textfilerna.
Kan en sådan fil vara snabb att söka i tro?
Som synes i början så verkar det bara coordinaterna finnas med. Det är i.o.f. det viktigaste
men visst ska det övriga innehållet också användas.

airportcoordinateindex=SBUA@-0.148056@-66.9858,SKLG@-0.182278@-74.7708,SETR@-0.122956@-76.3377,SECO@-0.460556@-76.9881,SEQU@-0.141111@-78.4886,SEGS@-0.453889@-90.2658,WIPR@-0.351667@102.334,WIDS@-0.478333@104.578,WIOO@-0.148056@109.404,WIOG@-0.348869@111.748,WALS@-0.487872@117.154,WALT@-0.093214@117.439,HKKI@-0.085331@34.73,HKGA@-0.466667@39.6333,HCMK@-0.35@42.4667,SBBE@-1.38472@-48.4789,SBJC@-1.415@-48.46,SBMD@-0.889444@-52.6017,SBTB@-1.485@-56.3983

navaidindex=1@0,1B@0,1E@56,1F@112,2@161,2A@161,2B@222,2F@271,2I@323,2J@380,2K@436,2S@488,2T@545,2U@599,3@653,3B@653,3J@707,3M@762,3N@821,3U@873,3X@925,3Z@980,4@1083,4B@1083,4G@1145,4H@1199,4K@1264,4L@1321,4M@1372,4N@1431,4O@1487,4Q@1542,4T@1594,4V@1648,4X@1704,5@1761,5J@1761,5Q@1816,5V@1869,5W@1924,5Y@1979,5Z@2030,6@2084,6F@2084

waypointindex=0@0,00@0,01@14984,02@34686,03@54280,04@74194,05@94175,06@114230,07@133999,08@153951,09@174027,0A@194335,0B@194668,1@194696,10@194696,11@216294,12@237719,13@258930,14@280267,15@301482,16@323493,17@344605,18@365483,19@386535,1A@407246,1B@407799,2@407886,20@407886,21@428657,22@449484,23@470539,24@491376,25@512063,26@535039,27@555982,28@577196,29@598088,2A@618576,2B@618865,2C@618894,2D@618952,2T@619036,2Z@619090,3@619118,30@619118,31@639759

/Pontus


Svara

Sv: Läsa från textfil

Postades av 2008-03-16 21:33:52 - Lars Gottfridsson

Om det bara rör sig om ett fåtal körningar per dag, så kanske nuvarande metod duger?

Men om du vill få den blixtsnabb så kan du alltid göra om varje textdokument till motsvarande tabell
i t. ex. MS access och där få snabba svar.


Svara

Sv: Läsa från textfil

Postades av 2008-03-17 00:16:09 - Ivan Jakesevic

Hejsan har klurat lite på din applikation, och detta är resultatet.
Funktionen nedan borde klara läsa av och söka igenom filen på mindre än 1 sek.

Dim strPattern As String
Dim strFilInfo As String
Dim oRead As IO.StreamReader


oRead = IO.File.OpenText("J:\waypoints.txt") 'ladda in filen
strFilInfo = oRead.ReadToEnd() 'läs in hela filen
oRead.Close() 'stäng readern


'förklara lite regex pattern
'(?<funnen>" & txtSearch.Text & ") = leta efter exakta ordet och spara den i gruppen funnen
'\| = leta efter streck tecknet
'(?<kordinatX>\-?\d{8}) = leta efter ett minus tecke, minusteckent kan förekomma en gång eller ingen gång, leta därefter ett numeriskt värde på 8tecken
'samma gäller för kordinat Y
'(?<kod>\w{2}) = leta efter 2 tecken och spara i gruppen kod


strPattern = "(?<funnen>" & txtSearch.Text & ")\|(?<kordinatX>\-?\d{8})\|(?<kordinatY>\-?\d{8})\|(?<kod>\w{2})"

Dim objRegEx As New Regex(strPattern)
Dim objMatches As MatchCollection = objRegEx.Matches(strFilInfo)


Dim strFunnen As String
Dim strKordinatX As String
Dim strKordinatY As String
Dim strKod As String

'loopar igenom alla funna resultaten
For i As Integer = 0 To objMatches.Count - 1
strFunnen = objMatches(i).Groups("funnen").Value
strKordinatX = objMatches(i).Groups("kordinatX").Value
strKordinatY = objMatches(i).Groups("kordinatY").Value
strKod = objMatches(i).Groups("kod").Value

'gör något med dom funna resultaten
'...
Next


Svara

Sv:Läsa från textfil

Postades av 2008-03-17 10:40:45 - Pontus Kjellberg

Jo visst har jag funderat på Access.
Tycker dock att det borde fungera rätt bra med "bara" textfiler också
och det gör det nog då jag börjat att testa lite med tipset från Ivan.


Svara

Sv:Läsa från textfil

Postades av 2008-03-17 10:44:26 - Pontus Kjellberg

Hej Ivan!

Det här var intressant och nytt för mig.
Efter lite justeringar så kommer detta nog att fungera både bra och snabbt.
Försöker att lära mig lite om hur man väljer andra sökkriterier och ska nog
få till det som jag vill så småningom.

Tack för tipset!

/Pontus


Svara

Sv: Läsa från textfil

Postades av 2008-03-17 11:31:37 - Ivan Jakesevic

Sorry glömde ge exempel på en fullständig pattern.

(?<funnen>DEVIL)\|(?<kordinatX>\-?\d{8})\|(?<kordinatY>\-?\d{8})\|(?<kod>K5)

Denna pattern kommer att leta i hela filen/strängen efter DEVIL och K5 som kod..
Du kan även ändra \d{8} på både kordinatY och X till vad du vill att den ska matcha.
Och en viktig grej ta inte bort \-? för den letar efter ett minustecken på kordinaterna.

På denna sidan kan du hitta olika patterns: http://www.regular-expressions.info/

Ha en trevlig dag, och lycka till med trixandet ;)


Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

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 726
27 958
271 751
481
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