Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: n-ta linijka
anonim




Typ: Nie zarejestrowany
n-ta linijka

Kto ma dobry sposob na odczytanie z pliku tekstowego n-tej linijki z danymi.
Obrazowo:

dane(1)
dane(2)
dane(3)
...
dane(n)
dane(n+1)
...

jak odczytac linijke o numerze n?

01-12-2004 20:40
  
losmac
"profesorek"




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

Każdy sposób jest dobry, jeśli spełnia Twoje oczekiwania...

Wszystko zależy od tego, jak zapisujesz do pliku.
Czy dane zorganizowane są w rekordy?
Jeśli nie, to podczas odczytu pliku podaj nr linni, która ma czytać, np.:


Sub OdczytTxt(fileName as String, Optional linia As Long = 0)
numFile = FreeFile()
Open fileName For Input As #numFile
    Do While i<=linia
        If i = linia Then
            'odczyt
            Input Line #numFile, sTmp
            MsgBox sTmp
        End if
        Input Line #numFile, sTmp
    Loop
Close #numfile
End Sub



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

01-12-2004 22:35
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
anonim




Typ: Nie zarejestrowany

No tak, ten sposob jest oczywisty, ale chcialem sie dowiedziec czy jest jakis inny bezposredni dostep do konkretnej lini.
Petla jest dobra, ale jesli chodziloby o linie nr 500 000 lub jeszcze wiecej to petla musi sie wykonac 500tys razy, a ja chce tak bezposrednio hop do lini nr 500000 :-)

01-12-2004 22:51
  
anonim




Typ: Nie zarejestrowany

Chcialem jeszcze dodac ze rekordy nie sa indexowane - poprostu liniijka pod linijka, ale jesli mialoby to w czyms pomoc to oczywiscie moznaby te linijki numerowac

01-12-2004 22:53
  
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004

Skoro znasz strukturę pliku ( a jest to napewno zapis sekwencyjny ) to nie powinieneś mieć klopotów z dostępęm do odpowiedniej linii pliku
choćby stosując pętlę For... Next Step np 1000
i z zastosowanie instrukcji EOF - na wypadek końca pliku


_____________________________________________
Visual Basic.NET - Mercedes dla programistów

02-12-2004 08:25
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
karolinavb




Typ: neutral
Postów: 468
Zarejestrowany: Jan 2003

Microsoft.Jet.OLEDB.4.0 lub Microsoft Text Driver  ADO (następnie metoda move) dostęp do pliku tekstowego. Najprościej, bez obsługi błedów, która trzeba dodać..

.....
Dim connCSV As New ADODB.Connection
Dim rsTest As New ADODB.Recordset
Dim adcomm As New ADODB.Command
Dim path As String
path = App.path & "\"
'''' bez naglowka FMT -trzeba ustalić i twedy można każde pole osobno
'''' mozna wykorzystac też schema.ini dla okreslenia parametrów pliku


connCSV.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& path & ";Extended Properties='text;HDR=NO;FMT=Delimited'"


'''''dla tekstowego z nagłówkami może być tak np

'''''connCSV.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" _
'''''& path & ";Extensions=asc,csv,tab,txt;HDR=YES;Persist Security Info=False"


rsTest.Open "Select * From karoTest.txt", _
    connCSV, adOpenStatic, adLockReadOnly, adCmdText
With rsTest
    Do While Not .EOF
        MsgBox IIf(IsNull(rsTest(0)), "Null", rsTest(0)) & "xxxxx" 'You can select the required data
        .MoveNext
    Loop
    '''''od 1-szej linii 2 linie w dół
    .Move 2, adBookmarkFirst
    MsgBox IIf(IsNull(rsTest(0)), "Null", rsTest(0))
    .Close
End With
Set rsTest = Nothing
connCSV.Close
Set connCSV = Nothing
......


_____________________________________________
Karolina

02-12-2004 12:58
Pokaż profil karolinavb  Wyślij email do karolinavb   
Piotr T




Typ: neutral
Postów: 176
Zarejestrowany: May 2004

IMIE | NAZWISKO | Dziewczynka | Lat:  | Czas pozostały:  103 s | Ilość uzyskanych punktów:  32 |  Czas ćwiczenia: 17.5 s | 4x8 | Mysz praworęczna |  Komputer Tak              | P          | 11.04.01  13:45:56
-----------------------------
w/g mnie to tym sposobem trochę utrudniłeś sobie odczyt pliku, gdyż jak zauważyłem długość linii jest różna. Ja na Twoim miejscu zmieniłbym sposób zapisu do takiej postaci:
-------------
IMIE
NAZWISKO
Dziewczynka
Lat:
Czas pozostały:  103 s
Ilość uzyskanych punktów:  32
Czas ćwiczenia: 17.5 s
4x8
Mysz praworęczna
Komputer Tak
P
11.04.01
13:45:56
------------------
Ja dane o różnej długości wolę zapisywać sekwencyjnie, gdyż odczyt z takiej postaci jest bardzo szybki, kiedyś też tak zapisywałem z separatorami i odczyt był makabrycznie czasochłonny nie mówiąc już o wyciągnięciu danych z różnych pozycji.

Odczyt sekwencji wyglądałby tak:



Open......
Do While not Eof(???)
  for Linia =1 to 13
  ' to na wypadek....
  If Eof(???) = True then Goto KONIEC

  Line Input ????
  'każdą linię pakujesz do zmiennej
  'a następnie ją obrabiasz w/g własnego uznania
  next
Loop
KONIEC:
Close


[Post edytowany dnia 02-12-2004 15:22 przez Piotr T]


_____________________________________________
Visual Basic.NET - Mercedes dla programistów

02-12-2004 15:20
Pokaż profil Piotr T  Wyślij email do Piotr T   Odwiedź stronę Piotr T  
anonim




Typ: Nie zarejestrowany

no coz czyli bez petli sie nie obejdzie :-/
Dzieki za odpowiedzi

02-12-2004 16:24
  
losmac
"profesorek"




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

Obejdzie się, jeżeli zastosujesz się do pewnej podpowiedzi.
Otóż tworząc strukturę, np.:

Type Wynik
    Imie As String *30
    Nazwisko As String *30
    Plec As String *30
    Wiek As Long
    CzasPoz As String *30
    Punkty As Long
    CzasCwicz As String *30
    Cos4x8 As String *30
    Mysz As String *30
    ...
End Type


Jeśli dane będą rekordami to wszystko bedzie proste, bo każdy rekord bedzie określonej długości. Wtedy jump do określonego rekordu nie będzie trudny. Zrealizujesz to za pomocą podpowiedzi Karoliny lub ...
poczytaj help'a


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

02-12-2004 21:03
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wszystkich odpowiedzi: 8 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1