Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VB 2008 & upisivanje teksta u csv file

[es] :: .NET :: VB 2008 & upisivanje teksta u csv file

[ Pregleda: 2071 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

PHP CODE
Banja Luka

Član broj: 235799
Poruke: 66
*.blic.net.



Profil

icon VB 2008 & upisivanje teksta u csv file12.08.2010. u 08:51 - pre 165 meseci
Pozdrav svima!

Kako bi na najlaksi (pocetnicki) nacin mogao da dodam odredjeni tekst na kraju n-tog reda u csv file-u?
Imam dakle file database.csv sa 15 000 redova. Aplikacija ucitava podatke u tri textbox-a. Obzirom da su podaci u obliku: "podatak1","podatak2","podatak3" (csv file) oni se rasporedjuju po textbox-ovima i pamti se broj reda koji se prikazuje.
Medjutim, zelio bih da, ukoliko su podaci uredno obradjeni da dodam na kraju reda jos i ,"OK" ali nisam siguran kako to da uradim.
Molim vas za pomoc. Hvala puno.
 
Odgovor na temu

bojan21
Bojan Zukic
Beograd

Član broj: 101113
Poruke: 251
92.244.151.*



+6 Profil

icon Re: VB 2008 & upisivanje teksta u csv file12.08.2010. u 18:36 - pre 165 meseci
Na koji nacin ucitavas te podatke u aplikaciju? Da li se svi podaci nalaze u memoriji (15K redova ne bi trebalo da zahteva mnogo resursa) ili ucitavas samo odredjene redove? Koliko znam, nije moguce izmeniti odredjenu liniju u datoteci, a da ne uradis "rewrite".

Za prvi slucaj, probaj nesto ovako:
Code (csharp):

using System.IO;

...
            //recimo da podatke i listu uredno formatiranih redova  
            //cuvas u ovim promenjivim
            List<string> data = new List<string>();
            List<int> validIndices = new List<int>();
   
            //tekst koji se dodaje na kraj reda ukoliko je ure
            string validText = ",\"OK\"";

...

            //pravimo novu instancu klase StreamWriter, kao parametar prosledjujemo
            //putanju do datoteke na disku gde zelimo da budu sacuvani podaci
            StreamWriter sw = new StreamWriter("C:\\data.csv");

            //za svaki element liste "data"
            for (int i = 0; i < data.Count; i++)
            {
               //procitamo njegovu vrednost
                string row = data[i];

                //ukoliko se indeks tog elementa nalazi u listi sa indeksima
                //onih elemenata koji su uredno formatirani (validIndices)
                if (validIndices.Contains(i))
                    //dodajemo na vrednost tog reda "OK"
                    row += validText;

                //upisujemo taj red u datoteku
                sw.WriteLine(row);
            }
            //zatvaramo datoteku i oslobadjamo resurse
            sw.Close();
 


Za drugi slucaj sve je isto, samo sto treba da ucitas datoteku sa podacima:
Code (csharp):

using System.IO;

...
           List<string> data = new List<string>(File.ReadAllLines("C:\\data.csv"));
...
 


Nadam se da razumes poentu. Pozdrav
 
Odgovor na temu

PHP CODE
Banja Luka

Član broj: 235799
Poruke: 66
*.blic.net.



Profil

icon Re: VB 2008 & upisivanje teksta u csv file13.08.2010. u 07:39 - pre 165 meseci
Eh, hvala puno na ovome, medjutim nasao sam neku alternativu, ali imam glup problemcic koji me muci.
Algoritam ide otprilike da se cijeli tekst ucita u varijablu string tipa, a onda red koji se obradjuje zamjeni sa istim + "OK". Medjutim, nece da mi sacuva tu varijablu na kraju :)
Code:


Public Function ReadALine(ByVal File_Path As String, ByVal TotalLine As Integer, ByVal Line2Read As Integer) As String
        Dim Buffer As Array
        Dim Line As String
        If TotalLine <= Line2Read Then
            Return "No Such Line"

        End If
        Buffer = File.ReadAllLines(File_Path)
        Line = Buffer(Line2Read)
        Return Line

    End Function

    Public Function GetNumberOfLines(ByVal file_path As String) As Integer
        Dim sr As New StreamReader(file_path)
        Dim NumberOfLines As Integer
        Do While sr.Peek >= 0
            sr.ReadLine()
            NumberOfLines += 1
        Loop
        Return NumberOfLines

        sr.Close()
        sr.Dispose()
    End Function

-------------------------

Dim filename As String = "D:\database.csv"
            CurrentLine = (ReadALine(filename, GetNumberOfLines(filename), counter - 2))
            '/Replace counter - 2 to line # you would like to read

            Dim FILE_NAME As String = "D:\database.csv"
            Dim objReader As New System.IO.StreamReader(FILE_NAME)

            MyDatabase = objReader.ReadToEnd
            objReader.Close()
            MyDatabase = Replace(MyDatabase, CurrentLine, CurrentLine & ";OK")
            TextBox4.Text = MyDatabase

            If System.IO.File.Exists(FILE_NAME) = True Then
                Dim objWriter As New System.IO.StreamWriter(FILE_NAME)

                objWriter.Write(MyDatabase)
                objWriter.Close()
            End If



Ovo je code, a ja ne pokusavam skontati sta nije OK. Prilikom provjeravanja, primetio sam da se ispravna vrednost upise u MyDatabase string, medjutim, nakon sledeceg prolaska, on jednostavno ignorise prethodnu vrijednost (tj, kao da je ne upise) pa samo u redu koji obradjujem imam stavku OK. Cim predje na sledeci, nestane sa prethocnog i pojavi se na sledecem :S
 
Odgovor na temu

bojan21
Bojan Zukic
Beograd

Član broj: 101113
Poruke: 251
92.244.151.*



+6 Profil

icon Re: VB 2008 & upisivanje teksta u csv file13.08.2010. u 14:52 - pre 165 meseci
Ne znam stvarno odakle ti taj kod, ali stvarno je lose napisan (primer: pogledaj samo koliko puta otvaras istu datoteku da bi procitao podatke koje mozes da dobijes samo sa jednim prolaskom - sve redove, broj redova, n-tu liniju).
Napisao sam ti drugi kod:
Code (vbnet):


'globalne promenjlive

'niz u koji ce biti smesteni podaci
Private data As String() = Nothing
'datoteka iz koje citas podatke
Private dataFile As String = "C:\data.csv"



'metode

'ucitavanje podataka iz datoteke u niz "data"
'parametri: fileName = adresa datoteke na disku
Private Function LoadData(fileName As String) As Boolean
     If File.Exists(fileName) Then
          Try
               data = File.ReadAllLines(fileName)
               Return True
          Catch
               Return False
          End Try
     Else
          Return False
     End If
End Function

'cuvanje podataka iz niza "data" u datoteku na disku
'parametri: fileName = adresa datoteke na disku
Private Function SaveData(fileName As String) As Boolean
     If data IsNot Nothing Then
          Try
               File.WriteAllLines(fileName, data)
               Return True
          Catch
               Return False
          End Try
     Else
          Return False
     End If
End Function

'vraca broj linija trenutno ucitane datoteke (vraca -1 ako nista nije ucitano)
'parametri: nema
Private Function GetNumberOfRows() As Integer
     If data IsNot Nothing Then
          Return data.Length
     Else
          Return -1
     End If
End Function

'vraca odredjenu liniju iz niza sa podacima "data"
'parametri: lineNumber = broj linije koja se cita
Private Function GetLine(lineNumber As Integer) As String
     If data IsNot Nothing Then
          If lineNumber > 0 AndAlso lineNumber <= GetNumberOfRows() Then
               Return data(lineNumber - 1)
          Else
               Return Nothing
          End If
     Else
          Return Nothing
     End If
End Function

'dodaje tekst "OK" na odredjenu liniju iz niza sa podacima "data"
'parametri: lineNumber = broj linije na koju se dodaje tekst
Private Function WriteOK(lineNumber As Integer) As Boolean
     If data IsNot Nothing Then
          If lineNumber <= GetNumberOfRows() Then
               data(lineNumber - 1) += ";OK"
               Return True
          Else
               Return False
          End If
     Else
          Return False
     End If
End Function

 

proverio sam ga, radi sasvim lepo kod mene. Imas komentar iznad svake funkcije koji opisuje sta vraca ta funkcija, mada mislim da na osnovu samog imena to mozes da zakljucis. Ako ti jos nesto nije jasno, slobodno pitaj.
Pozdrav
 
Odgovor na temu

[es] :: .NET :: VB 2008 & upisivanje teksta u csv file

[ Pregleda: 2071 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.