PDA

View Full Version : Linux



raktaros
03-14-2018, 06:42 PM
Nyitok egy ilyen témát, mert reménykedem hogy van itt valaki aki érti, mert valószínû sok kérdésem lesz.
Sajnos windows-on nõttem fel, már nagyon bánom hogy a könnyebbik utat választottam annak idején :)

Most nem kimondottan linux lesz:
Szeretnék php-ben egy text fájlt adott sornál kettévágni és két külön text fájlba letárolni.
Elvileg ez mûködik parancssorból, de php-ból nem tudom hogy kell lefuttatni:


head -n 100 input-file > output1
tail -n +101 input-file > output2

Valakinek ötlete hogyan tudnám megoldani?

coco
03-15-2018, 09:08 AM
Ilyesmire lehet szükséged: https://stackoverflow.com/questions/16778627/splitting-a-text-file-in-half-using-php

Lecseréled a $size/2-t a kívánt méretre, esetleg paraméterként adod át, kb. ennyi.

Mit szeretnél egyáltalán megoldani?

raktaros
03-15-2018, 09:31 AM
Köszönöm, megpróbálom.

Egy generált config fájlt szeretnék külön választani, mert az adott programnak úgy kell. Elõször külön akartam legenerálni a két fájlt -neki is álltam-, de az sokkal bonyolultabb mert egy már elkészített rendszerbe kell beleilleszteni ráadásul szeretném ha minél kevesebb fájlt kelljen módosítani az eredeti programon.
(FRN szerverhez webes gui az Openrepeater-be.)

raktaros
03-15-2018, 09:54 AM
Ez úgy nézem méretre vág, nekem meg sorra kellene, mert a méret változik :(
De kiindulási alapnak talán jó lesz.

coco
03-15-2018, 10:35 AM
Igen, a belinkelt példa rossz, bocs :duhos:

https://secure.php.net/manual/en/function.fgets.php

Nézd meg ezt. Van hozzá példakód is, soronként tudod feldolgozni a szöveges állományt, aztán az php fwrite()-tal (https://secure.php.net/manual/en/function.fwrite.php) oda írod, ahová szeretnéd.

raktaros
03-15-2018, 11:04 AM
Találtam egy ilyent, ez mûködött is:

<?php

// get file contents into string
$stringData = file_get_contents('MyTextFile.txt');

// split by newline
$arrayData = split("\n", $stringData);

$fileCount = 0;

// loop through arrayData
for ($i = 0; $i < count($arrayData); $i++)
{
$file = 'myFileName';
// for every 2000 lines, create a new file
if ($i % 2000 == 0)
{
$fileCount++;
}
file_put_contents($file . $fileCount . '.txt', $arrayData[$i]."\n", FILE_APPEND | LOCK_EX);
}

?>

Ezután még át kell nevezgetnem a készült fájlokat, arra kerestem "hogyan"-t és megtaláltam az eredeti kérdésemre a megoldást :)
(pedig keresgettem, meg próbálkoztam vele elõtte is, csak hát nem mindegy hogy ' vagy ")

Végül azzal oldottam meg, mert sokkal egyszerûbb, egy lépésben megvan a kívánt fájlnév is:


shell_exec("head -n 100 input-file > output1");
shell_exec("tail -n +101 input-file > output2");


Köszönöm hogy foglalkoztál a kérdésemmel.