Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 06.04.2011., 18:26   #1
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Čitanje stringova iz datoteke

Jezik je java.

Dakle imam datoteku sa redovima koji jednako izgledaju:

PRVARIJEČ - DRUGARIJEČ = X - Y

Ja znam kako čitati te redove, ali kako recimo da čitam samo prvu riječ i spremim ju u varijablu tipa string. Pa drugu i onda i nju spremim. Isto bi išlo i sa brojevima (X i Y) samo moram parseint koristit da pretvorim string u broj jer je njegova varijabla tipa integer.
ZMAJ je offline   Reply With Quote
Staro 06.04.2011., 20:58   #2
burki
Umalo Premium
 
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
Pozdrav!
Ne bi bilo dobro koristiti String za tu namjenu, pogotovo ako je datoteka velika. Bolje je koristiti StringBuilder jer je kod njega kod spajanja manja je vremenska složenost. Evo kod:
Code:
import java.io.*;

class files
{
		public static void main(String[] args)
		{
			try
			{
				String linija;
				BufferedReader in = new BufferedReader(new FileReader("file.txt"));
				StringBuilder text= new StringBuilder();
				while ((linija = in.readLine()) != null)
				{
					text.append("\n" + linija);
				}
				
				System.out.println(text);
			}
			catch (Exception e)
			{
				System.err.println("Error: " + e.getMessage());
			}
		}
}
burki je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 06.04.2011., 21:30   #3
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Mislim da nisi skroz razumio moj problem. Dakle imam tu datoteku koja u sebi već ima nekih 50-tak linija koje sve izgledaju onako kako sam gore objasnio. E sad bi dijelove tih linija trebao staviti u atribute određenog objekta. Jedan atribut je String (RIJEČ), a drugi je Integer (X).
ZMAJ je offline   Reply With Quote
Staro 07.04.2011., 11:13   #4
burki
Umalo Premium
 
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
Evo, varijanta u kojoj se riječi stavljaju u 2D polje. Na ktaju datoteke file.txt treba biti znak &.
Code:
import java.io.*;

class files
{
		public static void main(String[] args)
		{
			try
			{
				char slovo;
				int i = 0;
				int j = 0;
				BufferedReader in  = new BufferedReader(new FileReader("file.txt"));
				String[][] rijec = new String[100][100];
				rijec[0][0] = "";
				
				while((slovo = (char)in.read()) != '&')
				{
					if (slovo == '\n')
					{
						System.out.println(rijec[i][j]);
						i++;
						rijec[i][j] = "";
					}
					else if (slovo == ' ')
					{
						System.out.println(rijec[i][j]);
						j++;
						rijec[i][j] = "";
					}
					else
					{
						rijec[i][j] += slovo;
					}
				}
			}
			catch (Exception e)
			{
				System.err.println("Error: " + e.getMessage());
			}
		}
}
Znači, program čita znak po znak i, ako je znak za novi red on poveća red u polju, a, ako je znak za razmak, on poveća stupac.
I, sada ti možeš članove polja na određenim mjestima kastati u int i raditi s njima što treba...
burki je offline   Reply With Quote
Staro 07.04.2011., 14:34   #5
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Ok probao sam to ubacit s tim da sam stavio "System.out.println(rijec);" nakon elsa tako da vidim šta će mi izbacivat i konzola mi nekakve reference izbacuje (valjda su to reference...)

[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
PRVARIJEČ
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
-
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
DRUGARIJEČ
[[Ljava.lang.String;@1fb8ee3

[[Ljava.lang.String;@1fb8ee3

[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
X
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
-
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
Y

...


I pitanje, zašto baš 2D polje treba bit?
ZMAJ je offline   Reply With Quote
Staro 07.04.2011., 15:37   #6
burki
Umalo Premium
 
Datum registracije: Jan 2009
Lokacija: localhost
Postovi: 61
Pa izpisuje stalno referencu na prvi element polja. Šta će ti te reference?! Makni to.

2D polje sam koristio da bih lakše učitao podatke iz datoteke.
Sada možemo ljepše ispisati to na ekran:
Code:
import java.io.*;

class files
{
		public static void main(String[] args)
		{
			try
			{
				char slovo;
				int ii = 0;
				int jj = 0;
				int i = 0;
				int j = 0;
				BufferedReader in  = new BufferedReader(new FileReader("file.txt"));
				String[][] rijec = new String[100][100];
				rijec[0][0] = "";
				
				while((slovo = (char)in.read()) != '&')
				{
					if (slovo == '\n')
					{
						i++;
						rijec[i][j] = "";
					}
					else if (slovo == ' ')
					{
						j++;
						rijec[i][j] = "";
					}
					else
					{
						rijec[i][j] += slovo;
					}
				}
			
				for(ii = 0; ii <= i; ii++)
				{	
					for(jj = 0; jj <= j; jj++)
						if(rijec[ii][jj] != null)System.out.print("\t" + rijec[ii][jj]);
					System.out.println("");
				}	
			}
			catch (Exception e)
			{
				System.err.println("Error: " + e.getMessage());
			}
		}
}
burki je offline   Reply With Quote
Staro 07.04.2011., 15:57   #7
ZMAJ
Premium
 
Datum registracije: Jan 2003
Lokacija: Zagreb
Postovi: 2,937
Sad mi konzola hiti Error: 100.

Mislim meni opće netreba taj ispis nego na taj način pokušavam shvatit što se točne dogodilo gdje pa da znam dijelove hitat u objekte...

Konkretno ja trebam napravit:

rijec = "PRVARIJEC";
nekiBroj = parseInt(X); (nisam siguran dal ovo ide tocno ovako...)

if (rijec == objekt.getName()){
objekt.setBroj(nekiBroj);
}
itd.
ZMAJ je offline   Reply With Quote
Staro 07.04.2011., 18:16   #8
Tuna
Unregistered User
Moj komp
 
Tuna's Avatar
 
Datum registracije: Aug 2006
Lokacija: Našice
Postovi: 426
Citiraj:
Autor ZMAJ Pregled postova
Ok probao sam to ubacit s tim da sam stavio "System.out.println(rijec);" nakon elsa tako da vidim šta će mi izbacivat i konzola mi nekakve reference izbacuje (valjda su to reference...)

[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
[[Ljava.lang.String;@1fb8ee3
ja sam nov u svijetu jave al meni se ovo dešava kad ne pregazim klasu sa naredbom String toString
__________________

Tuna je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na