2017-01-26 3 views
0

Поэтому у меня есть много файлов, как это:Экспорт текстового файла в MySQL в Talend

Первый файл:

File1; 
Code;1971;1981;1991;2001;2011 
A;10;20;30;40;50 
B;12;22;32;89;95 
... 
... 

Второй файл:

File2; 
    Code;1971;1981;1991;2001;2011 
    A;1500;1600;460;6000;8000 
    B;6000;7000;8007;8009;9005 
    ... 
    ... 

Все файлы имеют точное в том же формате.

Я хотел бы иметь таблицу в моей базе данных, как это:

File Code Year Value 
File1 A  1971 10 
File1 A  1981 20 
File1 A  1991 30 
     .  .  . 
     .  .  . 
File2 A  1971 1500 
File2 A  1981 1600 
File1 A  1991 460 
    .  .  .  . 
    . .  .  . 
File2 B  1971 . 
File2 B  1981 . 
    .  .  .  . 

Моя идея заключается в том, чтобы создающих для каждого файла в t_map в Wich есть файл следующим образом: My solution with t_map

Проблема что у меня так много файлов, как это, и мое решение займет у меня много времени, чтобы закончить его. Есть ли лучшее решение?

+0

Можете ли вы изменить макет ваших файлов на стандартный макет? другими словами, поместите заголовки столбцов в строку 1, затем ваши данные строки1 в строке 2 и т. д. Тип макета файла, который вы используете, очень нетрадиционен, и вместо того, чтобы пытаться запрограммировать его, я рекомендую вам перейти на обычный макет , Если вы это сделаете, решение Talend станет намного проще. –

ответ

-4

Я предпочитаю использовать PHP, чтобы сбросить все данные в MySQL ...

Code;1971;1981;1991;2001;2011 
A;10;20;30;40;50 
B;12;22;32;89;95 

после открытого & чтения файла ($ файла), попробуйте это ...

<?php 

function _T($a){return rtrim(trim($a));} 
function _E($a,$b){return explode($a,$b);} 
function _S($a,$b,$c){return str_replace($a,$b,$c);} 
function _G($a,$b,$c){$d=strpos($a,$b);$e=substr($a,$d);$f=strpos($a,$c);return substr($e,0,($f-$d));} 

$file='Code;1971;1981;1991;2001;2011 
A;10;20;30;40;50 
B;12;22;32;89;95'; 

$fC=_E('|',_S('Code;','|Code;',$file)); 
/*Useful with Multiple "Code;" in same file too*/ 
$fC2=($file).'|'; 
/* Add "|" to the last */ 

$fY=array();/*Year*/ 
$fA=array();/*A*/ 
$fB=array();/*B*/ 
$dB=array();/* For Database */ 
foreach($fC as $fR){ 
/* Get Year; */ 
$gY=_E(';',_S('Code;','',_G(_T($fR),'Code;','A;'))); 
$c=0;foreach($gY as $yR){if(!empty($yR)){/*echo _T($yR).'<br>';*/$fY[$c++]=_T($yR);}} 
/* Get A */ 
$gA=_E(';',_S('A;','',_G(_T($fR),'A;','B;'))); 
$c=0;foreach($gA as $aR){if(!empty($aR)){/*echo _T($aR).'<br>';*/$fA[$c++]=_T($aR);}} 
/* Get B */ 
$gB=_E(';',_S('B;','',_G(_T($fR),'B;','|'))); 
$c=0;foreach($gB as $bR){if(!empty($bR)){/*echo _T($bR).'<br>';*/$fB[$c++]=_T($bR);}} 
if(empty($fB)){$gB=_E(';',_S('B;','',_G(_T($fC2),'B;','|'))); 
$c=0;foreach($gB as $bR){if(!empty($bR)){/*echo _T($bR).'<br>';*/$fB[$c++]=_T($bR);}}} 
} 

/* Show Result */ 
foreach($fY as $fK=>$fV){ 
echo $fK.':'.$fV.'='.$fA[$fK].'='.$fB[$fK].'<br>'; 
$dB[]=array('Year'=>$fV,'A'=>$fA[$fK],'B'=>$fB[$fK]); 
}print_r($dB); 

?> 

Проверьте себя .. . :)

+0

Привет! Тот, который мне кажется полезным, - это отступы от кода. За цикл, написанный в одной строке, очень трудно прочитать. Кроме того, одна символьная переменная может быть загадочной. Попробуйте прочитать свой код в перспективе OP. Самое большее, что он может сделать, это скопировать и вставить его. – Ibu

+0

«За цикл, который написан в одной строке, очень сложно использовать». Не очень сложно ... Нам просто нужно получить контент внутри A; -to-B; –

+0

«Есть ли лучшее решение?» <--- Я сделал что-то неправильно здесь ..? Или просто посмотрите и прочитайте мой код без теста.? : | –