» »

[VB 2005] branje teksta

[VB 2005] branje teksta

mNeRo ::

nasledni del programcka mi ne prebere celotnega besedila in ko zelim prebrano vpisat v textbox, mi to ne rata! zna kdo pomagat? :(
ce doda kdo se stevilke pred izpisom vrstice ( stevilko vrstice )...mu bom zelo hvalezen
        Dim fileReader As System.IO.StreamReader
        fileReader = _
        My.Computer.FileSystem.OpenTextFileReader("C:\test.txt")
        Do
            Dim stringReader As String
            stringReader = fileReader.ReadLine()
            MsgBox(stringReader)
            ListBox1.Items.Add(fileReader.ReadLine())
        Loop Until fileReader.ReadLine() Is Nothing


oprostite se za butasta vprasanja, VB se ucim sele par dni...:D


edit: pri odpiranju novih tem v prihodnje upoštevaj PREBERI ME: označevanje topicov v oddelku programiranje! - snow
  • spremenilo: snow ()

mHook ::

ListBox1 je verjetno ListBox in ne TextBox (ki bi verjetno bil TextBox1).
Kar je še treba pogledat pri TexBoxu, je lastnost MultiLine, ki mora biti true.

Za številko vrstice pa naredi približno takole:
Pred Do dodaj: Dim i as Int = 1
Pri ReadLine pa: i.ToString() + fileReader.ReadLine()

darkolord ::

pa tole

ListBox1.Items.Add(fileReader.ReadLine())

zamenjaj z

ListBox1.Items.Add(stringReader)

drugače ti doda samo vsako drugo vrstico

mNeRo ::

se vedno ne bere vseh vrstic ( jih preskakuje in nimam pojma zakaj...msgBox mi prikaze drugo in peto, v ListBox1 se mi dodajo prva in cetrta)... i se mi povecuje sele po dodanem ukazu 1+=1 :O

Dim fileReader As System.IO.StreamReader
fileReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\test.txt")
Dim i As Integer = 1

Dim stringReader As String
Do
stringReader = fileReader.ReadLine()
MsgBox(i.ToString() + fileReader.ReadLine())
ListBox1.Items.Add(i.ToString() + stringReader)

i += 1

Loop Until fileReader.ReadLine() Is Nothing
End Sub

mHook ::

Vsakič ko uporabiš ReadLine se prebere vrstica.
Če želiš, da ti bo delovalo, kot se spodobi, zamenjaj vse ReadLine() z stringReader (kot je že darkolord napisal), razen tam, kjer imaš
stringReader = fileReader.ReadLine()

Zaključek pa naredi z
Loop Until fileReader. EndOfStream

mNeRo ::

jeee hvala vsem! tako malo je blo treba....in skrati tako dosti! :D

mNeRo ::

no seedaj imam program kjer mi prebere kar je vpisano v text file in mi to nalozi v listbox. kako sedaj to nadgraditi da mi prevere recimo samo doloceno vrstico, pa se to do dolocenega znaka?!?? ( do navednic recimo )

streamreader:

Dim fileReader As System.IO.StreamReader
fileReader = _My.Computer.FileSystem.OpenTextFileReader("C:\Info.txt")
Dim stringReader As String
Do
stringReader = fileReader.ReadLine()

ListBox1.Items.Add( stringReader)
End If
Loop Until fileReader.EndOfStream

darkolord ::

Če fajl ni zelo velik, lahko prebereš vse, narediš split v array po vrsticah in potem prebereš določeno vrstico...

Dim vrstice() As String
vrstice() = vsebinaFajla.Split(vbCrLf)

' pokaze peto vrstico do (enojnih) navednic
MsgBox(vrstice(4).Substring(vrstice(4).IndexOf("'")))

Drugače pa pač daš en števec v loop za branje

mNeRo ::

hvala darkolord! je pomagalo! no jst mam zdejle tale problem:
dim ukaz as integer
ukaz=1
dim ukazi() as string
Dim ukaziReader As System.IO.StreamReader
ukaziReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\Ukazi.txt")
Dim stringUkaziReader As String
Do
stringUkaziReader = ukaziReader.ReadLine()

''''prebere kar je od vejice naprej, nato gre v drugo vrstico...kar mi prebere bi rad shranil....dal v pole...
ukazi(ukaz) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ",")) 'tu mi javi napako:
ukaz = ukaz + 1
Loop Until ukaziReader.EndOfStream

posamezne dele vrstic dam v polja... prva vrstica: ukazi(1)....druga: ukazi(2)...
tako da bi mi na zacetku program prebral textfile in kasneje bi samo klical: ukaz(5)...v dolocenih delih programa...nepa ponovno bral text file in gledal z zanko 5 vrstico...itd

napaka ki mi jo javlja: Object reference not set to an instance of an object.

Zgodovina sprememb…

  • spremenil: mNeRo ()

darkolord ::

ja, ukazi() je cel array, moraš mu povedat na kateri indeks boš shranil

ukazi(0) = "blabla" ' dela
ukazi() = "blabla" ' ne dela

delfy ::

zakaj se sploh mučiš tako??

StreamReader ima funkcijo ReadToEnd(), ki prebere fajl od začetka do konca. Torej preberi fajl v spremenljivko in uporabi funkcijo Split od String-a, pa boš imel vse v array-ju, s čimer pa lahko delaš, kar se ti zahoče.

V C# bi to zgledal nekako tako:

string Source = null;
using( System.IO.StreamReader sr = new System.IO.StreamReader( "pot do datoteke" ) )
{
Source = sr.ReadToEnd();
}
string[] Vrstice = Source.Split( '\n' );

potem pa lahko narediš:
Console.WriteLine( Vrstice[3] );

In tako dobiš potem ven tisto, kar želiš.

Teb pa javlja napako zato, ker ne podaš index-a, ko filaš v polje. Zmeraj, ko pokličeš

ukazi(index) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ","))

mu moreš podat še index. V VB.NET-u se začnejo indexi pri 1. Torej 1,2,3,4,5..... Če pa mu ti ne podaš index-a, pa on tud ne more vedet, na katero lokacijo v array naj on to da in zato zajamra.

mNeRo ::

delam tako, ker imam na zacetku vsake vrstice najprej komentar, ki ga ne potrebujem ampak ga imam da vem kaj imam v tisti vrstici. kar potrebujem je tisto za komentarjem...komentar se konca z vejico
dodal sem index ampak sevedno ista napaka

dim index as integer
index=1
dim ukazi() as string
Dim ukaziReader As System.IO.StreamReader
ukaziReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\Ukazi.txt")
Dim stringUkaziReader As String
Do
stringUkaziReader = ukaziReader.ReadLine()

''''prebere kar je od vejice naprej, nato gre v drugo vrstico...kar mi prebere bi rad shranil....dal v pole...
ukazi(index) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ",")) '''' 'tu mi javi napako:
index = index + 1
Loop Until ukaziReader.EndOfStream


napaka ki mi jo javlja: Object reference not set to an instance of an object.

Zgodovina sprememb…

  • spremenil: mNeRo ()

delfy ::

nastavi breakpoint in se sprehodi skozi v debug mode-u, pa boš videl, kaj je null.

mNeRo ::

ukazi(index) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ","))

joj...ne najdem... :O
index se mi lepo postavi na 0, InStrRev(stringUkaziReader, ",")...mi da stevilko kjer naj zacne subsring od tringUkaziReader
drugo pa zgleda OK. booo...:(

darkolord ::

In kjer imaš inicializiran array?

Zakaj ne narediš raje tako kot sem ti napisal, da cel fajl prebereš?

delfy ::

če uporabljaš vs2005, piše, kje je problem. In sicer to, da ukazi array ni "instanciran". Ti si samo ustvaru prostor (spremenljivko), kamor naj bi se shranil array, ampak array-a pa nisi naredil. Torej je ukazi spremenljivka null oz. Nothing v VB.NET-u.

Rešitev:
Dim index As Integer = 0
Dim ukazi() As String
Dim ukaziReader As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader("F:\1.txt")
Dim stringUkaziReader As String
While Not ukaziReader.EndOfStream
ReDim Preserve ukazi(index)
stringUkaziReader = ukaziReader.ReadLine()

''''prebere kar je od vejice naprej, nato gre v drugo vrstico...kar mi prebere bi rad shranil....dal v pole...
ukazi(index) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ",")) '''' 'tu mi javi napako:
index += 1
End While

MessageBox.Show(ukazi.Length.ToString())

ReDim pomeni, da ustvari novo polje velikosti index. Preserver pa pomeni, da naj vrednosti iz prejšnjega polja ohrani v novem. To je to.

mNeRo ::

koncno dela! :D

se eno vpr...ob prvem zagonu programa mi zanka try catch ulovi napako pri ukazi(0)... ceprow sm nastavu index na 0! cudno to! morem se malo pogledat...>:D

darkolord ::

...

Array moraš inicializirat prej!

mNeRo ::

ma nisem to ze naredil? kje prej? kako?

ta stvar res vcasih ne dela...
index=0
Dim ukaziReader As System.IO.StreamReader
ukaziReader = _
My.Computer.FileSystem.OpenTextFileReader("C:\Ukazi.txt")
Dim stringUkaziReader As String
Do
ReDim Preserve ukazi(index)
stringUkaziReader = ukaziReader.ReadLine()

ukazi(index) = stringUkaziReader.Substring(InStrRev(stringUkaziReader, ":"))

index = index + 1
Loop Until ukaziReader.EndOfStream

darkolord ::

Aha... no ko se ti ustavi oziroma dobiš napako, poglej vse parametre (samo miško daš čez), pa boš videl, kateri ne štima

delfy ::

V VB.NET-u se začnejo indexi pri 1. Torej 1,2,3,4,5.....


Torej je logično, da se zbuni pri 0.

darkolord ::

Nič se ne začnejo pri 1. Pri 0. Razen če imaš na roko nastavljeno Option Base 0

delfy ::

Pri VB6 se je index začel pri 1, za .NET pa ne vem.

Povej, kakšno napako vrže. In pa predvsem pokaži prvo vrstico v TXT datoteki, da vidimo kakšne podatke ji daš.

Js sem sprobal z:
asdsadasdihsaduisahiuh, asiodhasodjasoidjasoidosijoasjdo
sadasdsaodhasoi, sadiosajdosiadjoisad
sadosaodasodiasdasd, siajdoasidjoiasjdoasdjoasijdoa

Pa je šlo uspešno skozi, tak da je skor ziher nekaj narobe s podatki.

darkolord ::

Pri VB6 se je index začel pri 1

Ne, se ni

mNeRo ::

no sem resil problem. ze prej omenjena koda dela dobro... moj preblem je biw, da se kdaj ni zgodila in zato se mi je pojavljala Null napaka. zgodila se pa ni ker sm nalaganje (Form_Load) prekinil z enim drugim dejanjem in tako se tista koda vcasih ni zgodila. Moje zacetnisko znanje mi je nazalost govorilo da se Form-Load zgodi vedno v celoti.:\

no tudi s tega sm se nekaj naucil in bo mogoce komu prislo prau, kar sem napisal. hvala za pomoc vsem
LP


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

C# pomoč pri razmišljanju

Oddelek: Programiranje
352302 (1446) urozz
»

[Java]: replace - slovar v txt

Oddelek: Programiranje
121693 (1551) Spura
»

C# Program

Oddelek: Programiranje
393098 (2021) Spura
»

VC# čitanje iz datoteke in shranjevanje v polje

Oddelek: Programiranje
91173 (986) iceurb
»

[VB] Open

Oddelek: Programiranje
71532 (1371) Monster

Več podobnih tem