Gå till innehåll

Java programmering * läsa av fil med scanner


Enlight Designe

Recommended Posts

Hej ! 

 

har en text fil som ska läsas in och skrivas ut på konsolen använder eclipse . 

här är koden som jag har nu som är inne i en metod 

public void lasFil() throws IOException{
		sc = new Scanner (new File("resor.txt"));
		
		while (sc.hasNext()){
			id = sc.nextInt();
			km = sc.nextInt();
			min = sc.nextInt();
			
			if (km >20 & min <= 60 ){
				System.out.printf("%s %s %s ", id, km, min);
				}
			}
	}
	

text filen som heter "resor.txt" finns och ser ut så här problemet uppstår när detta tecken kommer upp ";" 

frågan är då hur kan man säga till Scanner'n att det är här du ska gå till nästa rad eller hoppa över dessa tecken ? 

1;53;38
2;28;27
3;39;72
4;12;30
5;21;35
 
OBS 
programmet fungerar bra när text filen ser ut så här 
1 53 38
2 28 27
3 39 72
4 12 30
5 21 35
6 19 32
6;19;32

 

Länk till kommentar
Dela på andra webbplatser

 Hej!

 

Med metoden useDelimiter kan du få Scannern att hoppa över det du vill.

Gjorde om din kod till ett litet fristående program, så här:

import java.util.Scanner;
import java.io.*;

class LasFil {
	public static void main(String[] args) throws FileNotFoundException{
	int id, km, min;
	
		Scanner sc = new Scanner (new File("resor.txt"));
		sc.useDelimiter("[; *|\n|\r]+");
			while (sc.hasNext()){
			id = sc.nextInt();
			km = sc.nextInt();
			min = sc.nextInt();
			
				if (km >20 & min <= 60 ){
				System.out.printf("%s %s %s ", id, km, min);
				}
			}
	}
}

Kört på dina data, med semikolon, blir resultatet det här:

1 53 38 2 28 27 5 21 35

Det var så här du menade, eller?

Länk till kommentar
Dela på andra webbplatser

 Hej!

 

Med metoden useDelimiter kan du få Scannern att hoppa över det du vill.

Gjorde om din kod till ett litet fristående program, så här:

import java.util.Scanner;
import java.io.*;

class LasFil {
	public static void main(String[] args) throws FileNotFoundException{
	int id, km, min;
	
		Scanner sc = new Scanner (new File("resor.txt"));
		sc.useDelimiter("[; *|\n|\r]+");
			while (sc.hasNext()){
			id = sc.nextInt();
			km = sc.nextInt();
			min = sc.nextInt();
			
				if (km >20 & min <= 60 ){
				System.out.printf("%s %s %s ", id, km, min);
				}
			}
	}
}

Kört på dina data, med semikolon, blir resultatet det här:

1 53 38 2 28 27 5 21 35

Det var så här du menade, eller?

 

Hej nice ! 

det var typ en sådan lösningen jag var ute efter men att ID kommer först sen kommer km och min sen sker radbrytningen ska läsa lite om sc.useDelimiter(); har inte riktigt förstått hur den arbetar. 

jag löste det på detta sätt 

import java.io.*;
import java.util.*;

public class huvudapp {
	
	private String strID, strKM , strMIN ;
	private int i;
	
	public void lasFil()throws IOException{
		Scanner sc = new Scanner (new File ("resor.txt"));
		while (sc.hasNextLine()){
			String line = sc.nextLine();
			String [] arr = line.split(";");
			
			strID = arr[0];
			int id = Integer.parseInt(strID);
			strKM = arr[1];
			int km = Integer.parseInt(strKM);
			strMIN = arr[2] ;
			int min = Integer.parseInt(strMIN);
			
			if (km>20 & min<60){
				System.out.print("ID:"+id+" MIN:"+min+" KM:"+km +"\n");
				i++;
			}
			
		}System.out.println(i+" persons that made the if statment");
}
	public static void main(String[] args) throws IOException { 

		huvudapp mt = new huvudapp (); 
		mt.lasFil();

	}

}

Utskriften
ID:1 MIN:38 KM:53
ID:2 MIN:27 KM:28
ID:5 MIN:35 KM:21
3 persons that made the if statment
Länk till kommentar
Dela på andra webbplatser

Hej igen!

 

Ja, det där var smart, att lägga raden i en Array och sen splitta den.

Jag kom på en till lösning, med en liten enklare useDelimiter() och en nextLine(),

så här:

import java.util.Scanner;
import java.io.*;

class LasFilx {
	public static void main(String[] args) throws FileNotFoundException{
	int id, km, min;
	
		Scanner sc = new Scanner (new File("resor.txt"));
		sc.useDelimiter("[; ]");
		while (sc.hasNext()){
		id = sc.nextInt();
		km = sc.nextInt();
		min = sc.nextInt();
		sc.nextLine();
			
			if (km >20 & min <= 60 ){
			System.out.println();
			System.out.printf("%s %s %s ", id, km, min);
			}
		}
	}
}

och så här blir det när man kör det:

1 53 38
2 28 27
5 21 35

och semikolonen är borta!

Länk till kommentar
Dela på andra webbplatser

Delta i dialogen

Du kan skriva svaret nu och registrera dig senare, Om du har ett konto, logga in nu för att svara på inlägget.

Gäst
Svara i detta ämne...

×   Du har klistrat in innehåll med formatering.   Ta bort formatering

  Only 75 emoji are allowed.

×   Din länk har automatiskt bäddats in.   Visa som länk istället

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Skapa nytt...