Javaでソート PracticalExercises5
自作iPhoneアプリ一覧
今回はJavaで既存のファイルを読み込んでソートをして現在の日時の名前で書き出します。
既存のファイルは(ひらがなの名前)、(携帯電話番号)、(e-mailアドレス)の3つの項目があり、[,]で区切ったcsvファイルとします。
2通りのサンプルを作ってみました。
1つ目はカンマを無視して1行を1つのデータとしてソートした場合。
2つ目はカンマで分割し1行を3つのデータとして1つ目の(ひらがなの名前)を基準にしてソートした場合。
既存のファイル:sampledata.csv
例:やまもと あきら,010-0001-0001,akira@yamamoto.com
1つ目
import java.io.*;
import java.util.*;
import java.text.*;
public class PracticalExercises5B {
public static void main(String[] args) {
// 現在時刻取得
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd '_' HHmmss");
// 読み込むファイルの名前
String filename = "sampledata.csv";
// 書き込むファイルの名前
String newname = sdf.format(new Date()) + ".csv";
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(newname)));
// ArrayListのインスタンスの確保
ArrayList<String> csvData = new ArrayList<String>();
System.out.println();
System.out.println("************************************************************************");
System.out.println("ソート前のデータ");
System.out.println("************************************************************************");
System.out.println();
// ソート前のデータの表示とArrayListへデータを格納
String line;
while ( (line = reader.readLine()) != null ) {
System.out.println(line);
csvData.add(line);
}
// 名前でソート
Collections.sort(csvData);
System.out.println();
System.out.println("************************************************************************");
System.out.println("ソート後のデータ");
System.out.println("************************************************************************");
System.out.println();
// ソート後のデータの表示とファイル出力
for (String data : csvData) { // イテレータ
System.out.println(data);
writer.println(data);
}
reader.close();
writer.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
サンプルデータ
2つ目
import java.io.*;
import java.util.*;
import java.text.*;
public class PracticalExercises5 {
public static void main(String[] args) {
// 現在時刻取得
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd '_' HHmmss");
// 読み込むファイルの名前
String filename = "sampledata.csv";
// 書き込むファイルの名前
String newname = sdf.format(new Date()) + ".csv";
try {
BufferedReader reader = new BufferedReader(new FileReader(filename));
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(newname)));
String line;
// ArrayListのインスタンスの確保
ArrayList<String[]> csvData = new ArrayList<String[]>();
//列の分割
while ( ( line = reader.readLine()) != null ) {
String[] cols = line.split(",");
csvData.add(cols);
}
// 要素がSampleData型のArrayList型のインスタンスを変数listを作りデータをセット
ArrayList<SampleData> list = new ArrayList<SampleData>();
for ( String[] col : csvData ) { // イテレータ
SampleData td;
td = new SampleData();
td.setName(col[0]);
td.setSel(col[1]);
td.setEmail(col[2]);
list.add(td);
}
System.out.println();
System.out.println("************************************************************************");
System.out.println("ソート前のデータ");
System.out.println("************************************************************************");
System.out.println();
// ソート前のデータの表示
for (SampleData data : list) { // イテレータ
System.out.println(data);
}
// 名前でソート
Collections.sort(list, new Comparator<SampleData>(){
public int compare(SampleData t1, SampleData t2) {
return t1.getName().compareTo(t2.getName());
}
});
System.out.println();
System.out.println("************************************************************************");
System.out.println("ソート後のデータ");
System.out.println("************************************************************************");
System.out.println();
// ソート後のデータの表示とファイル出力
for (SampleData data : list) { // イテレータ
System.out.println(data);
writer.println(data);
}
reader.close();
writer.close();
} catch(Exception e) {
e.printStackTrace();
}
}}
public class SampleData {
private String name;
private String sel;
private String email;
public String getName() {
return name;
}
public String getSel() {
return sel;
}
public String getEmail() {
return email;
}
public void setName(String name) {
this.name = name;
}
public void setSel(String sel) {
this.sel = sel;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString(){
return "" + name + "," + "" + sel + "," + email;
}
}
サンプルデータ1
サンプルデータ2
storyboardでデータの受け渡し
このチュートリアルではstoryboadを使って親のビューコントロールでテキストフィールドに入力した文字列を子のビューコントロラーラベルへ表示します。
コード編集の詳細
【ViewController.h】
#import
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UITextField *textField;
@end
【ViewController.m】
#import "ViewController.h"
#import "SecondViewController.h"
@implementation ViewController
@synthesize textField;
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
textField.delegate = self;
// Do any additional setup after loading the view, typically from a nib.
}
//Returnキーをタップした時、キーボードを隠すデリゲートメソッド
- (BOOL)textFieldShouldReturn:(UITextField *)textField {
[self.textField resignFirstResponder];
return YES;
}
//Switch Viewボタンをタップした時の処理
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showText"]) {
//showTextはStoryboardのsequeのIdentifier名
SecondViewController *svc =[segue destinationViewController];
//destinationViewControllerとはsequeの右側にあるViewControllerらしい
svc.labelData = self.textField.text;
}
}
【SecondViewController.h】
#import
@interface SecondViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *label;
@property (strong, nonatomic) NSString *labelData; //データを格納する変数
- (IBAction)goFirstView:(id)sender;
@end
【SecondViewController.m】
#import "SecondViewController.h"
@implementation SecondViewController
@synthesize labelData;
@synthesize label;
- (void)viewDidLoad
{
[super viewDidLoad];
label.text = labelData;
}
サンプルコードダウンロード
GameSaladのアプリを実行
自作iPhoneアプリ一覧
今回はGameSaladをiPhoneのシュミレーターや実機で実行する方法です。ごく簡単です。
事前にhttp://gamesalad.com/からDownload iOS Viewerをクリックしてダウンロードします。