Jump to content

Java programmering * läsa av fil med scanner


Enlight Designe
 Share

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

 

Link to comment
Share on other sites

 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?

Link to comment
Share on other sites

 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
Link to comment
Share on other sites

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!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Loading...
 Share

×
×
  • Create New...