Извлечение определенных значений (имя, адрес электронной почты, номер телефона) из текстового файла - PullRequest
0 голосов
/ 24 января 2011

У меня есть целая куча писем, из которых мне нужно получить информацию.Недавно я взял на сайт, который хранит всю их контактную информацию для клиентов в электронных письмах.Они хотят начать хранить это в базе данных.Я работаю с Java, пытаясь извлечь эту информацию.Я немного застрял.

Я смог загрузить сами письма, но не смог извлечь информацию.Вот пример электронной почты:

> ----------------------------------------------------------------------
> Name: Person's Name
> Phone:=20
> Email: test@testperson.com
> Street:=20
> City:=20
> State:=20
> Zip:=20
> Country:=20
> Arrival: 15 Nov 2010
> Departure: 22 Nov 2010
> Message: This is a message
> ----------------------------------------------------------------------
> Name: Second Person
> Phone:=555-5554
> Email: test@testpsdf.com
> Street:=1234 Main St.
> City:=20
> State:=20
> Zip:=23412
> Country:=20
> Arrival: 15 Nov 2010
> Departure: 22 Nov 2010
> Message: This is a message
> ----------------------------------------------------------------------

Мне нужно тянуть везде, где нет =20.Мне нужно каким-то образом перенести всю эту информацию в таблицу или файл CSV, чтобы я мог импортировать ее в базу данных mysql.

Редактировать:

На самом деле этот файл больше похож на

> ----------------------------------------------------------------------
> Name: Erin 
> Phone: 401-
> Email: eri
> Street: 737
> City: Paw
> State: 
> Zip: 02
> Country: USA
> Arrival: 17 Jul 2011
> Departure: 23 Jul 2011
> Message: I .=20
> ----------------------------------------------------------------------
>=20
> A representative will be in touch shortly.
> Thank You,
>
>=20
Begin forwarded message:

> From: 
> Date: July 8, 2010 12:35:13 PM EDT
> To: 
> Subject: Thank you for completing our contact form!
>=20
> Thank you for completing our contact form! We received the following =
information from you:
> ----------------------------------------------------------------------
> Name: Ludd
> Phone:=20
> Email: aedu
> Street: 25
> City: Signal 
> State: 
> Zip: 
> Country: USA
> Arrival: 25 Nov 2010
> Departure: 30 Nov 2010
> Message: Not sure if 
> ----------------------------------------------------------------------
>=20
> A representative will be in touch shortly.
> Thank You,
>
>=20
Begin forwarded message:

> From: 
> Date: July 8, 2010 11:29:49 AM EDT
> To: 
> Subject: Thank you for completing our contact form!
>=20
> Thank you for completing our contact form! We received the following =
information from you:
> ----------------------------------------------------------------------
> Name: Stephanie
> Phone: 41
> Email: sgor
> Street: 2-
> City: 
> State: On
> Zip:  1J6
> Country: 
> Arrival: 18 Aug 2010
> Departure: 21 Aug 2010
> Message:=20
> ----------------------------------------------------------------------
>=20
> A representative will be in touch shortly.
> Thank You,

>=20
Begin forwarded message:

> From: 
> Date: July 8, 2010 11:16:36 AM EDT
> To:
> Subject: Thank you for completing our contact form!
>=20
> Thank you for completing our contact form! We received the following =
information from you:
> ----------------------------------------------------------------------
> Name: Stacey 
> Phone: 001
> Email: staceymou
> Street: 60 
> City: New York
> State: NY
> Zip: 0
> Country: USA
> Arrival: 10 Dec 2010
> Departure: 14 Dec 2010
> Message: Looking to reserve 
> ----------------------------------------------------------------------

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Вот метод, который извлекает все такие заголовки в Map<String, String>.Он использует библиотеку Гуавы от Google для упрощения работы:

public static Map<String, String> readValuesFromFile(final File f)
    throws IOException{

    final Splitter splitter =
        Splitter.on(':').trimResults().omitEmptyStrings();

    final Map<String, String> map = Maps.newHashMap();

    for(final String line : 

        Lists.transform(
            Files.readLines(f, Charsets.UTF_8),
            new Function<String, String>(){

                @Override
                public String apply(final String input){
                    return input != null && input.startsWith("> ")
                        ? input.substring(2)
                        : input;
                }

    })){

        if(line.startsWith("---")){
            break;
        }
        final String[] items =
            Iterables.toArray(splitter.split(line), String.class);
        if(items.length == 2 && !items[1].startsWith("=20")){
            map.put(items[0], items[1]);
        }
    }
    return map;
}
0 голосов
/ 24 января 2011

Читайте файл, пока не получите строку "> -------".Прочитайте каждую строку (BufferedReader.readLine()), найдите в ней положение «:», возьмите часть строки перед и после нее (используйте String.indexOf(), String.substring(), String.trim()).Теперь у вас есть имя поля и его значение.Если значение не равно «= 20», поместите его в базу данных или запись CSV.

Если вы снова встретите строку «> -------», запись закончится.Вы можете легко обнаружить это по тому факту, что в нем нет символа «:».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...