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


Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-06-16 11:32:00 - Per Eriksson, i forum databaser, Tråden har 8 Kommentarer och lästs av 870 personer

Hej Alla!
Det var ett tag sedan jag senast använde Visual Basic så jag skulle vara tacksam om jag kunde få lite hjälp...

Problemet är nog enkelt men svårt att lösa på ett bra sätt!

Jag har en textfil med 975 684 tecken vilket motsvarar 14 622 rader.
Varje rad innahåller 11 columner.

Ett uttrag ur textdokumentet:

"SUPRTNDNT-LONNIE E PALMER","ALBANY CITY SD","010100010000","ACADEMY PARK","ALBANY","NY","122071099","518","4627200","3","0"

Jag vill att mitt program tar ut den andra kolumnen ur dokumentet och sedan sparar det i en ny fil.

Sen kan jag själv lägga upp kolumen i flera ~er i ett worddokument.

Son jag sa - "Problemet är nog enkelt men svårt att lösa på ett bra sätt!"
Vänliga Hälsningar
Per Ericsson


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-06-16 12:23:00 - Sven Åke Persson

Hej
Om du har VB 6.0 kan du använda den utmärkta
funktionen Split som lagrar texten i en Array
Så här skulle det kunna se ut.Du använder lämpligen
, (komma) som separator.

Dim SplitArr() As String
SplitArr = Split(dinInputString,",")
Nu kan du plocka varje ord ur Arrayen med början SplitArr(0) - (10)

mvh
Sven


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-06-16 14:08:00 - Sven Åke Persson

Hej igen
Wooops ! ditt problem var mer komplicerat än jag först trodde.

Pga "SUPRTNDNT-LONNIE E PALMER", "ALBANY CITY SD", "010100010000", "ACADEMY PARK", "ALBANY", "NY", "122071099", "518", "4627200", "3", "0"

Dvs " tecken och , så blir det problem med Split.

Utmaning hur löser Ni detta problem ? .Mitt svar kommer strax

DS


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-06-16 15:30:00 - Sven Åke Persson

Igen

Option Explicit
Private Sub Command1_Click()
'Så här blev min principlösning som fungerar.
'Försökte lösa det med Replace men det blev för struligt.
'Finns säkert smartare lösningar men som sagt det här kan funka.
'Luta dig tillbaka och låt datorn arbeta
'Editer om Orginalfilen för anpassning till Split
Dim FileNum As Long, FileNum2 As Long
Dim i As Long, filemax As Long, tmpStr As String
Dim tmpByte As String * 1, pos As Long
Dim SplitArr() As String

FileNum = FreeFile
'Kopia av din orginalfil
Open "E:\Vb6\SplitTest.txt" For Binary As #FileNum
filemax = LOF(FileNum)
For i = 1 To filemax
Get #FileNum, i, tmpByte
If tmpByte = Chr$(34) Then _
Put #FileNum, i, Chr$(32) ' " apostrof till space
If tmpByte = Chr$(44) Then _
Put #FileNum, i, Chr$(182) ' Chr$(44) , (komma) blir Chr$(182) avskiljare
Next 'i
Close #FileNum

FileNum = FreeFile
'Den nu anpassade orginalfilen
Open "E:\Vb6\SplitTest.txt" For Input As #FileNum
FileNum2 = FreeFile
'Din nya utfil med kolumn 2
Open "C:\NyText.txt" For Append As #FileNum2
Do Until EOF(FileNum)
Line Input #FileNum, tmpStr
SplitArr = Split(tmpStr, Chr$(182))
Print #FileNum2, Trim$(SplitArr(1))
Loop
Close #FileNum
Close #FileNum2
End Sub

DS


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-07-25 13:36:00 - Per Eriksson

TACK!!! Det funkar underbart! Hehe...


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-07-25 16:32:00 - Tom Svensson

Hej!

Har skrivit en annan lösning.

Den tillåter t ex rader som

"SUPRTNDNT-LONNIE, E PALMER","ALBANY CITY SD" ...

osv (lägg märkte till kommatecknet), och parsar det som
"SUPRTNDNT-LONNIE, E PALMER"
och inte t ex
"SUPRTNDNT-LONNIE,



<code>
strFile = "x:\testfil.txt" ' filen du vill dona med
strNewFile = "x:\nytextfil.txt" ' den nya filen
iCountColumns = 11 ' antal kolumner i filen du vill dona med
iReadColumn = 2 ' vilken kolumn som ska läsas och sparas ned i den nya filen

' Gör kopia av orginalet
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile strFile, strFile & ".bak"

' Läs in filen i strFileData
Set objOTF = objFSO.OpenTextFile(strFile, 1, True)
strFileData = objOTF.ReadAll
Set objOTF = Nothing

' Parsa innehållet i filen
Set objRE = New RegExp
objRE.Pattern = """([^""\\]*(\\.[^""\\]*)*)"",?|([^,]+),?|,"
objRE.Global = True
Set objMatches = objRE.Execute(strFileData)
c = 0
For Each colValue In objMatches
c = c + 1
If c = iReadColumn Then strColumnData = strColumnData & Left(colValue, Len(colValue) - 1) & vbCrLf
If c = iCountColumns Then c = 0
Next
Set objMatches = Nothing
Set objRE = Nothing

' Spara det i strNewFile
Set objCTF = objFSO.CreateTextFile(strNewFile, True)
objCTF.WriteLine (strColumnData)
objCTF.Close
Set objFSO = Nothing
</code>

Lycka till och lev väl,
Tom S.


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-07-26 12:42:00 - Andreas Hillqvist

Imponerad... Lär mig o allsmäktiga tomsve...

Vad betyder din Pattern mönster?

"""([^""\\]*(\\.[^""\\]*)*)"",?|([^,]+),?|,"


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-07-27 08:36:00 - Tom Svensson

Hej!

Strängen

"""([^""\\]*(\\.[^""\\]*)*)"",?|([^,]+),?|,"

...kan vi skriva som regexet...

"([^"\\]*(\\.[^"\\]*)*)",?|([^,]+),?|,


Vi kan dela upp det i tre delar, separerade med pipe-tecknet (|) som i regex betyder "eller":

"([^"\\]*(\\.[^"\\]*)*)",?
eller
([^,]+),?
eller
,



Förklaringar


= 1 ===================================================

"([^"\\]*(\\.[^"\\]*)*)",?

Betyder att strängen som vi letar efter ska börja med ett citationstecken och sluta med ett citationstecken. Kommatecknet är inte ett krav för att den här biten ska uppfyllas, så därför följls kommatecknet av ett frågetecken.

([^"\\]*(\\.[^"\\]*)*)

Gör det möjlighet att escapea tecken (främst citationstecken) i texten som man vill bearbeta (någon som vill ha förklaring av det regexuttrycket - skrik till så ska jag förklara). Den första kolumnen ur texten

"Tom \"tomsve\" Svensson", "Guldsmedsvägen 7, 3tr", "Stockholm"

skulle då bli/accepteras som

"Tom \"tomsve\" Svensson"

En enklare version av den första av dom tre bitarna skulle kunna vara

"[^"]*",?

Vilket betyder ungefär "Texten måste börja med ett citationstecken, vilket tecken som helst får förekomma efter det, bara det INTE är ett citationstecken. När ett citationstecken dyker upp, så kolla om det efterförljs av ett kommatecken (dock inte obligatoriskt för att den här biten ska returneras som sann). "

Tar hand om strängar som ser ut t ex
"Tom Svensson"
eller
"Tom Svensson",


= 2 ===================================================

Om den första biten inte uppfylls, så kontrollerar regexpobjektet den andra biten

([^,]+),?

Vilket tecken som helst, bara det inte är ett kommatecken. Ska efterförljas av ett kommatecken (dock inte obligatoriskt för att den här biten ska returneras som sann).

Tar hand om strängar som ser ut t ex
0708422804
eller
0708422804,


= 3 ===================================================

Om ingen av dom två bitar som vi gått igenom har uppfyllts, så kommer sista alternativet:

,

Helt enkelt: Det måste finnas ett kommatecken.

Tar hand om strängar som ser ut t ex
,
(alltså tomma poster)




Hoppas det klarnade lite nu. Har börjat med en liten regexkurs till PelleSoft som borde dyka upp om ett tag.

Ta väl hand om er!
Tom S.


Svara

Sv: Plocka Ut Andra Kolumnen Ur Textfilen

Postades av 2001-07-28 00:11:00 - Per Eriksson

Oooj........ du har varit i banschen i ett antal trettio år va...?


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 717
27 958
271 751
2 707
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