Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: program do przeszukiwania pliku txt
anonim




Typ: Nie zarejestrowany
program do przeszukiwania pliku txt

witam wszystkich
jestem poczatkujacy i stad moje pytanie

opisze stutacje
mam dwa pliki jeden to log z duza iloscia numerow drugi plik to list numerow
do sprawdzenia czy wystepuja w logu jezeli tak to nalezy je skopiowac do
pliku wynik wraz z dodatkowym stringiem tzw. klasa numeru.

zorbilem  petle w petli ale wydaje mi sie ze jedna /ta
wewnetrzna robi cala/ a drugiej nie poniewaz sprawdza tylko pierwszy numer z
pliku z numerami.
czy moze mi ktos cos doradzic bo w programowaniu to ja jestem laikiem a
chcialem dobie troszke prace ulatwic
z gory wielkie dzieki
Prosze o porade


kod programu

Option Explicit
Dim szukanynumer As String
Dim danynumer As String
Dim Pozycja As Integer
Dim klasa As String
Dim liniaszukana As String
Dim liniadana As String
Dim str As String
Dim x As Integer

Private Sub Form_Load()
x = 1
Kill "c:\wynik.txt"
Open "c:\log.txt" For Input As #1
Open "c:\numery.txt" For Input As #2
Open "c:\wynik.txt" For Output As #3

End Sub

Private Sub Command1_Click()
Do While Not EOF(2)
Line Input #2, liniaszukana
Call szukanie
Loop

End Sub


Private Sub szukanie()
szukanynumer = Left(liniaszukana, 9)
Do While Not EOF(1)
Line Input #1, liniadana
Pozycja = InStr(liniadana, szukanynumer)
str = Mid(liniadana, 1, 9)
If str = szukanynumer Then
klasa = Mid(liniadana, 13, 3)
Print #3, szukanynumer & "  " & klasa
End If
Loop
Exit Sub
End Sub


Pozdrawiam

Krzysztof

21-06-2003 14:03
  
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
hmmm

nie jestem do konca pewien czy dobrze mysle, ale po krotkiej analizie tego kodu wnioskuje ze ta glowna petle robi ci tylko raz.Sprobuj dac taki kod:

Private Sub szukanie()
szukanynumer = Left(liniaszukana, 9)
Do While Not EOF(1)
Line Input #1, liniadana
Pozycja = InStr(liniadana, szukanynumer)
str = Mid(liniadana, 1, 9)
If str = szukanynumer Then
klasa = Mid(liniadana, 13, 3)
Print #3, szukanynumer & "  " & klasa
End If
Loop 
End Sub

niepotrzebnie dales Exit Sub - to powoduje ze program wychodzi z procedury  jednoczesnie  ja konczac...
Sprobuj wywalic samo exit sub... na moje oko powinno wtedy zadzialac!

Pozdrawiam!

[Post edytowany dnia 21-06-2003 15:08 przez Alternativ]


_____________________________________________
SANTA!!

21-06-2003 15:07
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
anonim




Typ: Nie zarejestrowany
masz racje ...

glowna petle robi tylko raz.
ale wywalenie exit sub nic nie daje

Porosze o dalsze wskazowki

21-06-2003 15:40
  
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
hmm

przeslij mi najlepiej na maila przykladowe pliki z tymi liczbami to wtedy cos pokombinuje i moze sie cos wymysli...

Pozdrawiam!


_____________________________________________
SANTA!!

21-06-2003 21:25
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
Alternativ



Typ: neutral
Postów: 70
Zarejestrowany: Sep 2002
sprobuj tak:

sprobuj w ten sposob:

Option Explicit
Dim szukanynumer As String
Dim danynumer As String
Dim Pozycja As Integer
Dim klasa As String
Dim liniaszukana As String
Dim liniadana As String
Dim str As String
Dim x As Integer

Private Sub Form_Load()
x = 1
On Error Resume Next
Kill "c:\wynik.txt"
Open "c:\log.txt" For Input As #1
Open "c:\numery.txt" For Input As #2
Open "c:\wynik.txt" For Output As #3

End Sub

Private Sub Command1_Click()
Do While Not EOF(2)
Line Input #2, liniaszukana
szukanie
Loop
Close #1
Close #2
Close #3
End Sub


Sub szukanie()
szukanynumer = Left(liniaszukana, 9)
Seek (1), 1
Do While Not EOF(1)
Line Input #1, liniadana
Pozycja = InStr(liniadana, szukanynumer)
str = Mid(liniadana, 1, 9)
If str = szukanynumer Then
klasa = Mid(liniadana, 13, 3)
Print #3, szukanynumer & "  " & klasa
End If
Loop
End Sub


Zobacz w ten sposob - u mnie podzialalo.
Chodzi o to ze po przejsciu wew petli pozycja odczytu z #1 pliku byla na jego koncu i od razu przestala sie wykonywac owa petla.
Dopiero po zastosowaniu seek, ktore ustawia pozycje odczytu na poczatek wszystko dziala tak jak powinno.

Pozdrawiam!


_____________________________________________
SANTA!!

21-06-2003 22:33
Pokaż profil Alternativ  Wyślij email do Alternativ        2085428
Myle
2psc group




Typ: neutral
Postów: 29
Zarejestrowany: May 2003

niechce mi sie teraz tego analizowac - ale pierwsze co mi sie rzuca w oczy to "str = Mid(liniadana, 1, 9)"

nie powinno byc "str = Mid(liniadana, Pozycja, 9)" ?

Pozdrawiam

aaa. i "klasa = Mid(liniadana, 13, 3)" >> "klasa = Mid(liniadana, Pozycja+12, 3)" - tylko niewiem czy niepowinno byc 11 - to zalezy jak masz zbudowane te pliki

ok wycofuje sie teraz widze ze to przeszukuje pokolei linie, nie caly plik - narazie

[Post edytowany dnia 22-06-2003 05:49 przez Myle]


_____________________________________________
Windows I love this game

22-06-2003 05:36
Pokaż profil Myle  Wyślij email do Myle   
anonim




Typ: Nie zarejestrowany
Dziekuje wszystkim

... za pomoc
sposob Alternativ'a okazal sie strzalem w 10.
Zycze wszystkim udanych wakacji

Pozdrawiam Krzysztof

27-06-2003 06:11
  
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1