Pobieranie danych z pliku.

0

Witam. Dopiero zaczynam przygodę z java i mam takie dwa problemy. Potrzebuje pobrać dane z pliku znak po znaku tzn. bardziej chodzi mi o to że w pliku tekstowym mam jakaś funkcje np. y=2x+1 i potrzebuje pobrać dane w taki sposób żebym do jednej zmiennej przypisywał to co jest przy x a do drugiej pozostałą część w tym przypadku 1. Z wszelkie podpowiedzi będę wdzięczny. Pozdrawiam

0

Odczyt z pliku zrobiłbym w taki sposób:

String dane = "";
  try {


                                BufferedReader odczytaj = new BufferedReader(new FileReader("xxx.txt"));
                                        while((dane = odczytaj.readLine())!=null)
                                       
                                } 
                                        } catch (IOException e) {
                                        system.out.println("Fail");
                        }
 

oczywiście jeżeli odczytywanie linia po linii będzie pasowało do pliku. A później sprawdzenie w pętli w poszukiwaniu danego znaku

 
for(int i = 0; i<dane.length(); i++){
                                        
                                        if(dane.charAt(i) == 'x')
                                              // działanie 
                                }

0
 
import java.io.*;

public class Przyklad3_1
{

    public static void main(String[] args)
	{	
    	String dane = "";
    	int parametr;
    	  try {
    	 
    	 
    	                                BufferedReader odczytaj = new BufferedReader(new FileReader("c://plik.txt"));
    	                                        while((dane = odczytaj.readLine())!=null);
    	                                        for(int i = 0; i<dane.length(); i++){
    	                                        	 
    	                                        			if(dane.charAt(i)=='x'){  	     // działanie      }
    	                                        			
    	                                            
    	                                                 
    	                                    }
    	                                } 
    	                                        
    catch (IOException e) {
    	                                        System.out.println("Fail");
    	                        }
	}
}

Przy próbie uruchomienia dostaje taki komunikat:
Exception in thread "main" java.lang.NullPointerException
at Przyklad3_1.main(Przyklad3_1.java:16)

0

Napisz sensowna obsługę błędów. Takie coś:

catch (IOException e) 
{
      System.out.println(e);
}

to minimum.
Btw, formatuj kod.

0

Ostatnie pytanie. Mam ta cześć kod:

for(int i = 0; i<dane.length(); i++){
 
                                        if(dane.charAt(i) == 'x')
                                             
                                }
  

i teraz jak zrobić aby do zmiennej np. a wpisać liczbę która znajduje się przed x. Czyli jeżeli mam 2*x to do zmiennej a żeby była wpisana cyfra 2? Z góry dziękuje za odpowiedz i proszę wyrozumiałość za (na pewno dla wszystkich) banalne pytania :)

0

rozumiem że w pliku znajduje się funkcja typu y = 5*x +2 bo jeżeli tak to łopatologicznie aby wydobyć liczbę 5 z równania można mejknąć tak:

int szukana = 0;
for(int i = 0; i<dane.length(); i++){ 
                   if(dane.charAt(i) == 'x')
                   szukana =  dane..charAt(i-2); 
                                }
 

ale to łopatologicznie zrobione :)

0

Jeśli wejście jest zawsze postaci y=ax+b (bez białych znaków), to wystarczy:

String line = reader.readLine();
String x = line.substring(2, line.indexOf('x');
String y = line.substring(line.indexOf('+') + 1);

dla dowolnej długości x i y.

0

@bo: zdaje sie juz ktorys raz widze u Ciebie linijke System.out.println(exc) - jest jakis konkretny powod dla ktorego nie lubisz exc.printStackTrace(), wzglednie exc.printStackTrace(System.out) (jesli nie lubisz wypisywania na System.err)?

0

Przecież napisałem

catch (IOException e)
{
System.out.println(e);
}
to minimum.

Efekty działania showStackTrace() nie odpowiadają mi estetycznie ;-), niekiedy nie byłem też w stanie zobaczyć na konsoli tego co interesujące. Na ogół używam swojej "funkcji globalnej":

    public static void showStack(Throwable e,int howMany)
    {
        StackTraceElement[] stos=e.getStackTrace();
        System.out.println(e.toString());
        for (int i=0;i<howMany && i<stos.length;i++)
        {
            System.out.println(""+stos[i]);
        }
    }

Trudno ją polecać w przykładach na forum.

0

Nie ucinasz sobie w ten sposob stosu wywolan za duzo? Np., czy widzisz wszystkie root-wyjatki?

0

Zazwyczaj piszę showStack(ex,10); niekiedy showStack(ex,15); Nie przypominam sobie sytuacji by 15 za mało.

1 użytkowników online, w tym zalogowanych: 0, gości: 1