Autor | Zpráva | ||
---|---|---|---|
Nikitaa Profil * |
#1 · Zasláno: 26. 9. 2017, 08:39:06
Zdravím.Jak vyřešit následující problém? Mám v PC tisíce souborů .txt . Potřebuji z každého zkopírovat prvních 558 znaků jinam. Jak to udělat? Mám win 10.
Prostě otevřít soubot .txt, zkopírovat 558 znaků a zavřít. A takto všechny soubory. |
||
Keeehi Profil |
#2 · Zasláno: 26. 9. 2017, 09:23:37
Dá se to vyřešit třeba s PHP, pokud ho máš nainstalované.
K zjištění jména souboru ve složce slouží třeba funkce scandir nebo glob. Získané pole souborů můžeš projít pomocí foreach. K získání obsahu souboru můžeš potom použít třeba file_get_contents. Jeho posledním parametrem se dá omezit délka načítaného řetězce na 558 bajtů. Záleží na kódování souboru, zda to odpovídá i 558 znakům ale tebe stejně spíš asi zajímají bajty. |
||
Nikitaa Profil * |
#3 · Zasláno: 26. 9. 2017, 09:34:15
Tak to dohromady nikdy nedám.
|
||
Keeehi Profil |
#4 · Zasláno: 26. 9. 2017, 10:39:10
Zas tak složité to není
<?php $path = "cesta/ke/slozce/se/soubory"; $full = ''; foreach (glob("$path/*.txt") as $filename) { $full .= file_get_contents($filename, false, null, 0, 558)."\n"; } file_put_contents('results.txt', $full); |
||
Nikitaa Profil * |
#5 · Zasláno: 26. 9. 2017, 10:57:02
Já se ještě zeptám. Bude to fungovat i tak aby to ve složce 1 otevřelo soubor text1.txt a zkopírovalo do složky 2 do souboru text1.txt?
To už bych asi chtěla moc že? Problém je že těch souborů je 600 a potřebuju to každý den takto udělat. Z txt1 do txt1, z txt2 do txt2 atd... Vždy 855 znaků. |
||
Keeehi Profil |
Ani to není problém
<?php $path_in = "cesta/ke/slozce/se/soubory"; $path_out = "cesta/ke/slozce/s/vysledky"; foreach (glob("$path_in/*.txt") as $filename) { $part = file_get_contents($filename, false, null, 0, 558); file_put_contents("$path_out/".basename($filename), $part); } |
||
juriad Profil |
S prostředky linuxího shellu (potřeba do windows doinstalovat cygwin, mingw, či git bash) to lze jednoduše udělat takto:
find cesta-ke-zdroji -iname '*.txt' | xargs -I '{}' sh -c 'head -c 588 {} > cesta-k-cili/`basename {}`' |
||
Časová prodleva: 6 dní
|
|||
Nikitaa Profil * |
#8 · Zasláno: 2. 10. 2017, 11:20:57
Mám to takto:
<?php $path_in = "pokus/1/1"; $path_out = "pokus/2/2"; foreach (glob("$path_in/*.txt") as $filename) { $part = file_get_contents($filename, false, null, 0, 558); file_put_contents("$path_out/".basename($filename), $part); } Ze souboru 1.txt do souboru 2.txt to ale nenakopíruje nic. |
||
Keeehi Profil |
#9 · Zasláno: 2. 10. 2017, 11:42:03
Nikitaa:
Takhle to ale nefunguje. Počítá to s tím, že v $path_in je složka*. Z ní to vybere všechny soubory, všechny je projde a do složky $path_out uloží výsledek do stejně pojmenovaných souborů. * Co co tam máš ty vypadá jako cesta se složkou a kusem názvu souboru. Přidal jsem ti tam část na kontrolu existence těch složek. Takto budeš vědět, zda máš cestu dobře. A taky výpis, kolik souborů se tam našlo. <?php $path_in = "pokus/1"; $path_out = "pokus/2"; if (!is_dir($path_out)) { echo "Složka $path_in neexistuje.<br>\n"; } if (!is_dir($path_out)) { echo "Složka $path_in neexistuje.<br>\n"; } if (!is_dir($path_out) || !is_dir($path_out)) { echo "Skript ukončen.<br>\n"; exit; } $files = glob("$path_in/*.txt"); echo "Ve složce $path_in/ bylo nalezeno ".count($files)." textových souborů."; foreach ($files as $filename) { $part = file_get_contents($filename, false, null, 0, 558); file_put_contents("$path_out/".basename($filename), $part); } |
||
Časová prodleva: 5 let
|
0