שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

Slides:



Advertisements
Similar presentations
Chapter 10 Ch 1 – Introduction to Computers and Java Streams and File IO 1.
Advertisements

More Java Syntax. Scanner class Revisited The Scanner class is a class in java.util, which allows the user to read values of various types. There are.
Text File I/O. Text Files and Binary Files Files that are designed to be read by human beings, and that can be read or written with an editor are called.
Lecture 19: Reading Input from Files Announcements & Review Lab 6 Due Thursday arrays of objects more flight reservations Last time: static methods vs.
21-Jun-15 Simple Text I/O. java.util.Scanner Java finally has a fairly simple way to read input First, you must create a Scanner object To read from the.
1 CSE 142 Lecture Notes File input using Scanner Suggested reading: , Suggested self-checks: Section 6.7 # 1-11, These lecture.
Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 1 Files.
Click to edit Master title style Click to edit Master text styles Second level Third level Fourth level Fifth level 1 Files Section 2.13, Section 8.8.
Exceptions and IO Dr. Andrew Wallace PhD BEng(hons) EurIng
2-1 CM0551 Week 3 The scanner class – file input A Spelling Checker Time and space requirements for various dictionary structures.
1 BUILDING JAVA PROGRAMS CHAPTER 3 THE SCANNER CLASS AND USER INPUT.
Recitation 1 CS0445 Data Structures Mehmud Abliz.
Console Input. So far… All the inputs for our programs have been hard-coded in the main method or inputted using the dialog boxes of BlueJ It’s time to.
David Streader Computer Science Victoria University of Wellington Copyright: David Streader, Victoria University of Wellington File handeling and Scanning.
Java Fundamentals 3 Input and Output statements. Standard Output Window Using System.out, we can output multiple lines of text to the standard output.
1 BUILDING JAVA PROGRAMS CHAPTER 6 FILE PROCESSING.
1 BUILDING JAVA PROGRAMS CHAPTER 6 DETAILS OF TOKEN-BASED PROCESSING.
Unix Environment Input Output 2  List Content (ls) ◦ ls (list current directory) ◦ ls –all (include hidden files/folders)  Make directory (mkdir) ◦
CMSC 202 Text File I/O. Aug 8, Text Files and Binary Files Files that are designed to be read by human beings, and that can be read or written with.
1 Building Java Programs Chapter 6 Lecture 6-3: Section Problems reading:
1 Software 1 Java I/O. 2 The java.io package The java.io package provides: Classes for reading input Classes for writing output Classes for manipulating.
BHCSI Programming Contests. Three contests Mock Contest #1  Friday, July 16 th  2:15 – 4:45pm UCF High School Online Contest  Thursday, July 22 nd.
Building Java Programs Chapter 6 Lecture 6-2: Line-Based File Input reading:
תוכנה 1 תרגול מס ' 4 שימוש במחלקות קיימות : קלט / פלט (IO)
 Learn about computer files  Use the Path class  Learn about  Streams  Buffers  file organization  Use Java’s IO classes to write to and read from.
1 / 65 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 12 Programming Fundamentals using Java 1.
CSC Java Programming, Fall, 2008 Week 3: Objects, Classes, Strings, Text I/O, September 11.
File Input & Output Sections Outcomes  Know the difference between files and streams  Use a Scanner to read from a file  add “throws” annotations.
1 Line-based file processing suggested reading:6.3.
Programming Fundamentals 2: Libraries/ F II Objectives – –utilize some useful Java libraries e.g. String, Scanner, HashMap, and Random.
import java.util.Scanner; class myCode { public static void main(String[] args) { Scanner input= new Scanner(System.in); int num1; System.out.println(“Enter.
Java I/O 1. Java I/O (Input and Output) is used to process the input and produce the output based on the input. The java.io package contains all the classes.
File Input & Output Sections Outcomes  Know the difference between files and streams  Use a Scanner to read from a file  add “throws” annotations.
Copyright 2008 by Pearson Education Building Java Programs Chapter 3 Lecture 3-3: Interactive Programs w/ Scanner reading: self-check: #16-19.
David Streader Computer Science Victoria University of Wellington Copyright: David Streader, Victoria University of Wellington File handeling and Scanning.
CS1020 Data Structures and Algorithms I Lecture Note #16 File Processing.
Programming – Lecture 15 Going Beyond the ACM Library.
1 Text File Input and Output. Objectives You will be able to Write text files from your Java programs. Read text files in your Java programs. 2.
Introduction to programming in java
Building Java Programs Chapter 6 File Processing Copyright (c) Pearson All rights reserved.
COMP Streams and File I/O
Building Java Programs
Streams & File Input/Output (I/O)
CMSC 202 Text File I/O.
CS 160 Final Review.
Reading from a file and Writing to a file
File handling and Scanning COMP T1
Building Java Programs
Strings and File I/O.
File Input and Output TOPICS File Input Exception Handling File Output.
Peer Instruction 9 File Input/Output.
שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
Something about Java Introduction to Problem Solving and Programming 1.
Simple Java I/O part I Using scanner 8-Nov-18.
File Input and Output TOPICS File Input Exception Handling File Output.
CS Week 11 Jim Williams, PhD.
שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש
Building Java Programs Chapter 6
Introduction to Computing Using Java
CS 302 Week 13 Jim Williams, PhD.
class PrintOnetoTen { public static void main(String args[]) {
F II 6. Using Libraries Objectives
Building Java Programs
CSC1401 Input and Output (with Files)
មជ្ឈមណ្ឌលកូរ៉េ សហ្វវែរ អេច អ ឌី
Building Java Programs
Building Java Programs
Building Java Programs
Building Java Programs
Optional Topic: User Input with Scanner
Presentation transcript:

שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש תרגול מס' 4: המתרגם שימוש במחלקות קיימות מחרוזות, קבצים, וקבלת קלט מהמשתמש

המחלקה Scanner סורק טקסט פשוט אשר יודע לחלץ טיפוסים פרימיטיביים ומחרוזות. "שובר" את הקלט לרכיביו השונים (מילה, מספר וכדומה) בעת היצירה מקבל כפרמטר מהיכן לקרוא את הקלט בפרט, יכול לאפשר לנו לקרוא קלט מהמשתמש. Scanner scanner = new Scanner("12 12.4 the long\nand winding road ...") int anInt = scanner.nextInt(); float aFloat = scanner.nextFloat(); String aString = scanner.next(); String aLine = scanner.nextLine(); String bLine = scanner.nextLine(); //12 //12.4 //the // long //and winding road ... https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Scanner.html

שימוש ב delimiter ב scanner String input = "1 fish 2 fish red fish blue fish "; Scanner s = new Scanner(input).useDelimiter(" fish "); while (s.hasNext()) System.out.println(s.next()); s.close(); ה delimiter הדיפולטי מבצע הפרדה על תוים לבנים (רווחים, ירידות שורה, טאבים ועוד). Output: 1 2 red blue

המתרגם משימה: שאלות: תכנית המתרגמת קטעי טקסט לשפה אחרת הקלט: קובץ המכיל את קטעי הטקסט וכן את השפה אליה רוצים לתרגם שאלות: האם כבר יש שירות תרגום שאנחנו יכולים להשתמש בו? כיצד קוראים מקבצים? מה הפורמט של הקלט? נצטרך להחליט

פתרון צעד אחר צעד כצעד ראשון נפתור בעיה הרבה יותר פשוטה תכנית שמתרגמת את המילה “Hello” מאנגלית לצרפתית יש: שימוש בשירות תרגום אין: קלט, טקסט, עבודה עם קבצים, פורמט

API – Application Programming Interface ממשק המאפשר לאפליקציה לתקשר עם תוכנה אחרת בג'אווה קיימים כלים רבים הזמינים ברשת בקוד פתוח בתרגול זה נשתמש ב-API תרגום כללי Translate ברשת קיימים כלים שונים של Google, Microsoft ועוד

שלב א' public class TranslatorEngine1 { public static void main(String[] args) { String TranslatedText = Translate.execute("Hello", "English", "French"); System.out.println(TranslatedText); } מתודה סטטית, שנקראת מן המחלקה (Translate). ניתן להניח שקיים מימוש של Translate בפרוייקט שלנו

שלב ב' - אינטראקציה עם המשתמש קלט מהמשתמש יינתן בשורת הפקודה פרמטר ראשון: המילה לתרגום פרמטר שני: שפת המקור פרמטר שלישי: שפת היעד public class TranslatorEngine2 {   public static void main(String[] args) { String TranslatedText = Translate.execute(args[0], args[1], args[2]); System.out.println(TranslatedText); }

קלט אינטרקטיבי מה אם נרצה להעביר קלט במהלך ריצת התוכנית? >java TranslatorEngine Enter your input: Hello English French Your translation is: Bonjour

שימוש ב Scanner לצורך קריאת קלט מהמשתמש בתור התחלה, נקרא מה-console (הקלט הסטנדרטי של התכנית) - system.in האובייקט system.in הוא מטיפוס InputStream עליו נדבר בהמשך הקורס. Scanner scanner = new Scanner(System.in); int anInt = scanner.nextInt(); …

דוגמא Scanner s = new Scanner(System.in); קרא מ- standard input Scanner s = new Scanner(System.in); System.out.println("enter line:"); while (s.hasNext()) System.out.println(s.next()); s.close(); קרא את ה- Token הבא מתי הקוד הזה יעצור?

שלב ג' – שימוש בסיסי ב- Scanner נבחר את פורמט הקלט: <word> <source-lang> <target-lang> לדוגמא, הקלט: hello English French הפלט: bonjour public class TranslatorEngine3 { public static void main(String[] args) { Scanner s = new Scanner(System.in); String[] fragments = s.nextLine().split(" "); String TranslatedText = Translate.execute(fragments[0], fragments[1], fragments[2]); System.out.println(TranslatedText); s.close(); }

קבצים במקום לקרוא את שורת הקלט מהמשתמש נקרא אותה מקובץ קובץ מיוצג ע"י המחלקה java.io.File נאתחל את האובייקט עם המסלול (path) לקובץ String filePath = "C:\\Software1\\example.txt”; File exampleFile = new File(filePath);

מסלול (Path) לקובץ מסלול יחסי – Relative path new File("Software1\\example.txt") ב-eclipse המיקום ה"נוכחי" במהלך ריצה הוא ה-Project root דרך טובה לבדוק את המיקום הנוכחי של הפרוייקט הוא לייצר קובץ במיקום היחסי, ואז לבדוק היכן הוא נוצר. מסלול מלא – Absolute path new File("C:\\Software1\\example.txt") יתרון – ניתן להריץ את התוכנית מכל מקום והיא תמיד תוכל למצוא את הקובץ. חסרון- הרבה פעמים הקובץ ממוקם יחסית לתוכנית, ואז אם היא מועתקת, גם הקובץ מועתק והקוד לא ירוץ. טעות נפוצה בתרגילי הבית: הגשת קוד שמכיל מסלול מלא לקובץ: new File("C:\\users\\lenadank\\software1\\ex4\\my_file.txt")

מסלול (Path) לקובץ כיצד נדאג שהתכנית תתאים לכל מערכת הפעלה? (Windows, Linux...) פתרון א': new File("Software1/example.txt") פתרון ב': new File("Software1" + File.separator + "example.txt") פתרון ג': נקבל את המסלול כקלט מהמשתמש.

שלב ד' – Scanner וקריאה מקובץ המסלול לקובץ יהיה (שדה) קבוע של המחלקה public class TranslatorEngine4 { private static final String FILE_NAME = "Software1" + File.separator + "example.txt"; public static void main(String[] args) throws Exception { Scanner s = new Scanner(new File(FILE_NAME)); String[] fragments = s.nextLine().split(" "); String TranslatedText = Translate.execute(fragments[0], fragments[1], fragments[2]); System.out.println(TranslatedText); s.close(); }

זריקת חריגים – הצהרת throws בעת חיבור ה-Scanner לקובץ עלולה להיזרק שגיאה (חריג, Exception) מסוג FileNotFoundException במקרה שהקובץ ממנו ניסינו לקרוא לא קיים, ריצת המתודה תעצור החריג מכיל הסבר על מקור השגיאה שתי אפשרויות להתמודדות: זרקו הלאה או טפלו נדבר על טיפול בחריגים ועוד בהמשך הקורס. כרגע נטפל בחריג באופן הבא: נצהיר על זריקת חריג בחתימת המתודה באמצעות המילה השמורהthrows . החריג עליו נצהיר יהיה חריג מטיפוס Exception, שהוא החריג הכללי ביותר שיש. כלומר, המתודה שלנו מצהירה שהיא יכולה לזרוק חריג, ומי שקורא לה צריך להיות מודע לזה ולטפל בזה במידת הצורך.

שלב ה' – קלטים מרובים מספר שורות קלט מקובץ נקרא מספר קלטים עד לסוף הקובץ, שימוש ב- hasNextLine public class TranslatorEngine5 { private static final String FILE_NAME = "Software1" + File.separator +"example5.txt"; public static void main(String[] args) throws Exception { Scanner s = new Scanner(new File(FILE_NAME)); while (s.hasNextLine()) { String[] fragments = s.nextLine().split(" "); System.out.println(Translate.execute(fragments[0], fragments[1], fragments[2])); } s.close();

נרחיב את המחלקה שלנו לטיפול בפיסקאות נרצה לקרוא פיסקה, להמיר לשורה אחת, ולתרגם. צריך להגדיר את פורמט הקלט מחדש. נגדיר: <source-lang>#<target-lang>#<paragraph> למשל: English#French#Hello world! This program works. Bye.

שלב ו' – תרגום פסקה English#French#Hello world! This program works. public class TranslatorEngine6 { private static final String FILE_NAME = "Software1" + File.separator +"example6.txt"; public static void main(String[] args) throws Exception { Scanner s = new Scanner(new File(FILE_NAME)); s.useDelimiter("#"); String srcLanguage = s.next(); String destLanguage = s.next(); s.skip("#"); String text = ""; while (s.hasNextLine()) { text += s.nextLine() + ' '; } System.out.println(Translate.execute(text, srcLanguage, destLanguage)); s.close(); English#French#Hello world! This program works. Bye.

לאן עכשיו? טיפול בשגיאות הרחבת התכנית ... פורמט לא תקין, כשלון בזיהוי השפות או בתרגום ניתן לבדוק בקוד או להגדיר בחוזה הרחבת התכנית תרגום מספר קבצים מספר פסקאות בקובץ יחיד זיהוי אוטומטי של שפת הקלט ...

המחלקה StringBuilder מייצגת מחרוזות ניתנת לשנוי (mutable) מאפשרת לבצע שינוי במחרוזת קיימת מבלי ליצור עצמים חדשים שירותים חשובים: append ו- insert StringBuilder sb = new StringBuilder("abc"); sb.append("d"); למה לא לשרשר מחרוזות באמצעות חיבור מחרוזות?

שאלה מבחינה (מועד א', סמסטר א', תשע"ו) שאלה מבחינה (מועד א', סמסטר א', תשע"ו)