Witam, mam problem z przetworzeniem tekstu w pliku i pogrupowaniu go na fragmenty pojedyncze.
Chciałbym wiedzieć, gdzie może leżeć problem.
Fragment pliku tekstowego (zachowany oryginalny format, całość ma ok. 750 linii):
ABC "abc101" ID 1 admin up operational state is up
Pierwszy ID 4413 Drugi ID 3(bbb 1/2.6)
Pierwszy ID 4414 Drugi ID 3(bbb 1/2.6)
Pierwszy ID 13020 Drugi ID 6(bbb 1/4.1)
Pierwszy ID 13022 Drugi ID 6(bbb 1/4.1)
Pierwszy ID 4801 Drugi ID 8(bbb 1/1.5)
Pierwszy ID 4802 Drugi ID 8(bbb 1/1.5)
Pierwszy ID 4809 Drugi ID 8(bbb 1/1.5)
Pierwszy ID 11204 Drugi ID 12 (bbb 1/1.4)
Pierwszy ID 14201 Drugi ID 25 (bbb 3/2.1)
Pierwszy ID 14202 Drugi ID 25 (bbb 3/2.1)
Pierwszy ID 14203 Drugi ID 25 (bbb 3/2.1)
ABC "abc102" ID 2 admin up operational state is up
Pierwszy ID 11915 Drugi ID 19 (bbb 0/0.0)
ABC "abc103" ID 3 admin up operational state is down
ABC "abc104" ID 4 admin up operational state is up
Pierwszy ID 10113 Drugi ID 1(bbb 1/4.4)
Pierwszy ID 10302 Drugi ID 3(bbb 1/2.6)
Pierwszy ID 10307 Drugi ID 3(bbb 1/2.6)
Pierwszy ID 4 Drugi ID 4(bbb 1/1.6)
Pierwszy ID 10404 Drugi ID 4(bbb 1/1.6)
Pierwszy ID 10502 Drugi ID 5(bbb 1/4.3)
Coś co chce uzyskać to:
array{
[key] => [value]
}[/syntax]
gdzie:
array{
[ABC] => [ID(pierwsze)]
}
KOD - >>>>
$handle_test = file("/etc/test_write.txt"); #Odczyt z pliku
if($handle_test){
#var_dump($handle_test);
foreach($handle_test as $key => $value)
{
$reg_string = "/[^0-9\-]*([-]?[0-9]*\.?[0-9]*)[^0-9]*/"; #dla wartości liczbowych
preg_match($reg_string, $value, $valu);
if (strlen($value) > 1){
if(strlen($valu[1]) == 3 || (strlen($valu[1]) >= 1 && strlen($valu[1]) < 3) || strlen($valu[1]) > 3){
if(strlen($valu[1]) == 3){
$array1 = array();
$a = array_push($array1, $valu[1]);
}
if((strlen($valu[1]) >= 1 && strlen($valu[1]) < 3) || strlen($valu[1]) > 3){
$array = array();
$b = array_push($array, $valu[1]);
}
$combine = array_combine($array1, $array);
#echo $c[102];
print_r($combine);
}
}
}
Próbowałem też rozwiązań z while +fopen i fgets oraz z feof i w każdym przypadku dostaje ten sam wynik.
Niestety wskazany kod zwraca mi wynik z przesunięciem i dodatkowymi wartościami w ABC np. 2x 102:
(jeżeli wydrukuje osobno obie tablice to nie ma duplikatów ani przesunięć.)
Array
(
[101] =>
)
Array
(
[101] => 4413
)
Array
(
[101] => 4414
)
Array
(
[101] => 13020
)
Array
(
[101] => 13022
)
Array
(
[101] => 4801
)
Array
(
[101] => 4802
)
Array
(
[101] => 4809
)
Array
(
[101] => 11204
)
Array
(
[101] => 14201
)
Array
(
[101] => 14202
)
Array
(
[101] => 14203
)
Array
(
[102] => 14203
)
Array
(
[102] => 11915
)
Array
(
[103] => 11915
)
Array
(
[104] => 11915
)
Array
(
[104] => 10113
)