Pobieranie danych z pliku.

Pobieranie danych z pliku.
  • Rejestracja: dni
  • Ostatnio: dni
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

remigio
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 357
0

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

Kopiuj
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

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

  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
 
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)

  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

to minimum.
Btw, formatuj kod.

  • Rejestracja: dni
  • Ostatnio: dni
0

Ostatnie pytanie. Mam ta cześć kod:

Kopiuj
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 :)

remigio
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 357
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:

Kopiuj
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 :)

iooi
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 573
0

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

Kopiuj
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.

  • Rejestracja: dni
  • Ostatnio: dni
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)?

  • Rejestracja: dni
  • Ostatnio: dni
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":

Kopiuj
    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.

  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.