Hej. mmm... inga problem.Bara att fundera på hur du vill börja plocka. Så här har du skrivit. Ja, det är alltid samma saker jag vil plocka ut, dock så kanske inte vissa saker finns med i vissa posten och finns många andra i andra poster. Du har fått en kod från någon annan. Du vill göra ändringar, så du ber någon annan skriva ny kod åt dig? Tja, ungefär så är det. <b>>, jag vila veta hur man tar ut olika delar ur en text, det andra skrev jag mest dit för ni skulle förstå hur jag menade mest.</b> Hej, få den i en databas går inte, vi får filen i det här formatat och så ska vi mata in den i en databas, det är hela syftet med det här projektet :) Tackar, det uppskattas verkligen! Njae... Det lättaste är nog i så fall att du lär dig regular expressions, och försöker lösa det på det sättet. Sök på "regexp tutorial", så får du nog fram något bra. Ok, ska leta på en sådan.Läsa ifrån textfil, läsa sia delar, avdela.
Håller på med ett litet program till jobbet.
Det kommer en textfil, *.txt
Där finns ett ärenden som ska plockas ut enskilt.
Vid varje nytt ärenden finns en avskiljare, <-- av sådan typ.
Nu säger vi såhär
rsdfad1 5
rasdfd2 5
rsdfad3 5 <-- den vill jag plocka ut
rasdfd4 <-- 5 ---- den vill jag plocka ut.
rasdfd13 55
rasdfd44 54
rsdfad55 55 <-- den vill jag plocka ut
rasdfd43 <-- 56 -- den vill jag plocka ut
rasdfd13 55
rasdfd44 54
rsdfad55 55 <-- den vill jag plocka ut
rasdfd43 <-- 56 -- den vill jag plocka ut
Sen håller det på sådär i ett par år. Hur gör jag det här på lättas sätt, jag är väldigt ny på VB kanske ska tillägga, så förklara grundligt.
För läsa textfilen använder jag mig utav
Set cRead = CreateObject("Scripting.FileSystemObject")
Set oRead = cRead.OpenTextFile(tRead, ForReading, True)
Här kommer en snutt av hur textfilen ser ut
Om det inte ser vettigt ut kopiera in det i en textfil
[kod]
Fältsektion 0000-00 5555-55-55
Box 555
555 55 DaseStan
Expeditionstid: 55555 - 5555
Telefonnummer: 555-55 55 55
Telefaxnummer: 555-55 55 55
Script Hem AB
BOX 5555
55 55 DASETOWN
Utdrag ur databasen avseende:
555555-5555
Fredriksson, Fredrik
Fredriksgata 55 F 555 55 Fredrikstad
-------------------------------------------------------------------------------
Stor sak allmänna mål: 55
Fordonsskatt 55
Skuld i enskilda mål: 55 555 (antal mål: 5)
Diarienr: U-555555-55 Begränsad tillgångsundersökning begärd
Sökande/Ombud HANDELSBANKEN FINANS AB(PUBL) KRONOR 55 555
Åtgärder:
Förfrågan till raksaken
FREDRIKSFONDEN
Fältsektion 0000-00 5555-55-55
Box 555
555 55 DaseStan
Expeditionstid: 55555 - 5555
Telefonnummer: 555-55 55 55
Telefaxnummer: 555-55 55 55
Script Hem AB
BOX 5555
55 55 DASETOWN
Utdrag ur databasen avseende:
555555-5555
Fredriksson, Fredrik
Fredriksgata 55 F 555 55 Fredrikstad
-------------------------------------------------------------------------------
Stor sak allmänna mål: 55
Fordonsskatt 55
Skuld i enskilda mål: 55 555 (antal mål: 5)
Diarienr: U-555555-55 Begränsad tillgångsundersökning begärd
Sökande/Ombud HANDELSBANKEN FINANS AB(PUBL) KRONOR 55 555
Åtgärder:
Förfrågan till raksaken
FREDRIKSFONDEN
Fältsektion 0000-00 5555-55-55
Box 555
555 55 DaseStan
Expeditionstid: 55555 - 5555
Telefonnummer: 555-55 55 55
Telefaxnummer: 555-55 55 55
Script Hem AB
BOX 5555
55 55 DASETOWN
Utdrag ur databasen avseende:
555555-5555
Fredriksson, Fredrik
Fredriksgata 55 F 555 55 Fredrikstad
-------------------------------------------------------------------------------
Stor sak allmänna mål: 55
Fordonsskatt 55
Skuld i enskilda mål: 55 555 (antal mål: 5)
Diarienr: U-555555-55 Begränsad tillgångsundersökning begärd
Sökande/Ombud HANDELSBANKEN FINANS AB(PUBL) KRONOR 55 555
Åtgärder:
Förfrågan till raksaken
FREDRIKSFONDEN [/kod]
Det lilla fyrkantiga tecknet som finns med före varje "post" är ascii nr. 12 i.a.f., om det kan hjälpa något.
Jag vill leta på ex, Fältsektion och sen dela in den i en "separat post" till nästa Fältsektion dyker upp.
Sen vill jag säga att ex, 5 rader nedanför Fältsektion och 8 steg så kommer en text på 8 bokstäver som jag vill kopiera och sätta in i en string, intreger, hur gör jag det?
Efter jag har lagrat det jag vill i den posten så går det till nästa och hämtar exakt samma saker.
I varje "post" vill jag ta ut ett par saker, osm personnr, namn, o.s.v.
Mvh Anders.Sv: Läsa ifrån textfil, läsa sia delar, avdela.
Ser framför mig en ListBox , kan också vara en TextBox där du klickar för det du vill ha ut.
Jag skulle direkt skippa FileSystemObject.Det finns rakare sätt.
Iofs.skulle man kunna krångla till det med Regulare Expression.
Men som sagt bara "scanna" textfilen och plocka det man anger rad efter rad.Sv: Läsa ifrån textfil, läsa sia delar, avdela.
<-- den vill jag plocka ut
Är det alltid dessa du vill plocka ?Sv:Läsa ifrån textfil, läsa sia delar, avdela.
Tex, såhär kan det se ut.
Post 1 Kostnad
Namn Jonas
person-nr 897
Granhuggning 34
Granhuggning 43
Björkhuggning 43
Ointressant 34
-------------------------------------------
Post2
Namn Johan
person-nr 233
-------------------------------------------
Post 4
Namn Carl
Person-nr 533
Granhuggning 54
Björkhuggning 54
Ointressant 34
Nu ska han plocka ut allt som finns i det där posterna utom onintressant.
Granhuggning är ett prioterat och björkhuggning är inte.
Då ska det lällga ihop hur många Granhuggning det finns och hur många Bjökhuggning det finns sumera de enskilt, alltså, lägger ihop hur många granhuggning det finns i varje post och sumerar summan och samma sak på bjökhuggning.
En kille på IDG.se har hjälp mig med en början på en kod
Här tar den bara fram varje separat post, nu vill jag göra en sökning i den.
------------------------------------------------------------------------
Dim srtFileName As String
Private Sub Command1_Click()
' Öppna rexfil.
Common.ShowOpen
' Sätter in sökvägen till filen en sträng
srtFileName = Common.FileName
' Skickar filesökvägen till Sub Script
Script srtFileName
End Sub
Sub Script(strINFO As String)
' Deklarerar
Dim arrData()
Dim cRead As New FileSystemObject
Dim oRead As TextStream
' Läs in all data i sData
Set cRead = CreateObject("Scripting.FileSystemObject")
Set oRead = cRead.OpenTextFile(strINFO, 1, True)
sData = oRead.ReadAll()
' Skapa en instans av objektet RegExp. Använd för att utföra sk. mönstermatchningar i en sträng
Set regEx = New RegExp
'Sätt det mönster som skall användas. \f matchar ett FormFeed tecken. ([^\f]+) matchar alla nästföljande tecken fram till nästa FormFeed. Uttrycket inom parentes är det som senare i koden hämtas med Match.SubMatches(0)
regEx.Pattern = "\f([^\f]+)"
' Ignorera versaler/gemener i mönstermatchningen (ej av vikt i det här fallet)
regEx.IgnoreCase = True
' Ange att samtliga träffar skall returneras (annars får du bara ut den första posten)
regEx.Global = True
' Exekvera mönstermatchningen. Resultatet returnerar i en sk. Collection (i det här fallet döpt till matches)
Set matches = regEx.Execute(sData)
nCnt = matches.Count
If nCnt > 0 Then
' Expandera den dynamiska arrayen så att den får plats med samtliga träffar
ReDim arrData(nCnt - 1)
nIdx = 0
' Loopa igenom och spara undan varje träff i arrayen och kör en msgbox
For Each Match In matches
arrData(nIdx) = Match.SubMatches(0)
MsgBox (arrData(nIdx))
nIdx = nIdx + 1
Next
End If
End Sub
-------------------------------------------------------------------------------------------
Mvh Anders.Sv: Läsa ifrån textfil, läsa sia delar, avdela.
Eller?
1. Förstår du den koden du redan har?
2. Kan du VB?
3. Är det en specifik fråga du vill ha hjälp med, eller vill du ha ett färdigt program från någon annan?
Om det är så att du kan VB och verkligen vill ha hjälp med något som du har kört fast på, så är det inget problem för oss att svara. Däremot bör du nog inte förvänta dig att någon tänker ge dig en färdig lösning.
PS. Anders eller Johan?
Det står Johan i namnet och du svarar som Anders.Sv:Läsa ifrån textfil, läsa sia delar, avdela.
Han gav mig en bit av den här koden för pilla vidare med, vilket jag gör och jag börjar förstå inbörden av den, men att jag förstår precis allt som står i koden gör jag verkligen inte.
Tja, ganska specifik, jag vila veta hur man tar ut olika delar ur en text, det andra skrev jag mest dit för ni skulle förstå hur jag menade mest.
Jag vill jättegärna lära mig VB, jag tycker det är skitroligt att programmera, och jag försöker verkligen lära mig, dock är det lite stressigt då det här är till jobbet, som inte har råd att anställa någon att göra det åt dem, så då tar de en anställd med gamla aspkunskaper.
Jag vill inte ha hela koden skriven till mig, men jag vill gärna ha en liten snutt som man kan mixtra och flippa med så man förstår inbörden av den lättare, och därifrån utveckla den till något som jag skapar.
Just nu förstår jag inte mer än att jag kan ta ut små textbitar med hjälp utav MsgBox (Mid(sträng, 5, 6)) o.s.v.
Och det är Anders, lånat konto p.g.a. ingen mail.
Nu har jag precis varit och köpt Visualbasic för Windows för dummies, som möjligtvis kan göra mig lite klokare på den här biten.
Mvh Anders.Sv: Läsa ifrån textfil, läsa sia delar, avdela.
Ok, grunden är att använda Mid, även om det ofta är lite krångligt.
mid(x, a, b)
ger dig b tecken med start i tecken nummer a från strängen x. Om du inte skriver b så betyder det resten av strängen
Med det kan du i princip göra vad som helst.
Om du vill dela en sträng på ett visst sätt kan du skriva (t.ex.):
Dim halva1 As String, halva2 As String, original As String
Dim brytposition As Long
brytposition = 5
original = "..." 'Någon intressant text
halva1 = Mid$(original, 1, brytposition)
halva2 = Mid$(original, brytposition+1)
Men problemet har lite dåliga förutsättningar.
Finns det något du kan rucka på; hur text-filen genereras, hur datat finns uppställt etc?
Personligen tror jag det går snabbare för dig att lära dig hur du bör bygga en databas för ändamålet (ev. med lite Regular Expressions) och implementera det än att göra en mycket instabil lösning genom att själv leta i strängen. Som nybörjare finns det väldigt många fallgropar med en sån lösning.
Hade jag själv fått välja i ett liknande uppdrag så är det inte omöjligt att jag skulle vilja göra hela skiten i Excel. Min poäng är bara att om du inte är så van vid att programmera, så tror jag inte att företaget gör en förtjänst på att låta dig få en personlig crasch-course och hoppas att det blir en hållbar lösning som ett "vanligt program". Det finns bättre miljöer där mycket redan är förberett, och det finns mycket mer hållbara lösningar.
Ev. så tar ni in en konsult.
Alltså; tänk noga över om detta verkligen är rätt väg; det kan bli dyrare i längden. Därmed inte sagt att det är en dålig idé att utbilda dig och låta dig sköta det, men är det något som behövs hyfsat fort (säg en månad) så är det svårt att få till något bra.Sv:Läsa ifrån textfil, läsa sia delar, avdela.
Mvh Anders.Sv: Läsa ifrån textfil, läsa sia delar, avdela.
Har nu fortsatt på den här koden och plockar ut textsträngar med.
Nu anväder jag mig utav (mid(sträng, 2 , 3))
Men om jag vill börja på en anged position och vill sluta där det börja en siffra, som om det står tillexempel
Grafikvägen 23 642 32 Stängnäs
Först vill jag sätta in Vägen, Gatan i en variabel, sedan väg, gatnummret, sedan postnummret och sist staden. Men de har ju olika längd allihopa, så man kan inte ange exakt position på början och slut. Hur gör man det här lättas?
Kan man skriva på något sätt mid(sträng, 34, end next number) typ :)
Mvh Anders.Sv:Läsa ifrån textfil, läsa sia delar, avdela.
I princip kan du ju annars leta med Mid genom strängen tills du hittar, eller bättre, att använda InStr, som ger en position i en sträng;
InStr("abcdef", "c")
ger 3 som svar.
PS. Använd hellre Mid$ än Mid. Det är lite krångligt att förklara nu, men det är bättre med ett $ ... =)Sv: Läsa ifrån textfil, läsa sia delar, avdela.
Om man ska leta upp hur många gånger ordet finns med då?
tillexempel om "jaga" finns med 3 gånger, sedan kopiera hur många gånger det finns med till en variabel?
Märkte att inStr söker bara upp första ordet sen stannar den.
Mvh Anders.