PHP - Borrar fragmentos de linea y modificar archivo.txt

 
Vista:
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 26/04/2019 20:40:27
Hola.

Soy nuevo en la programación y Necesito ayuda, quiero saber si existe una manera de editar un archivo .txt con php o con algún otro lenguaje de programación que originalmente tiene este contenido:

LINEA 1| | | | | | | | | BORRAR | | | | | | | | | | | |
LINEA 2 | | | | | | | | | | | | | | | | | BORRAR | | | | | | | | | |
LINEA 3 | | | | | | | | | | | | |BORRAR | | | | | | | | | | | | | | | | | | |

y quisiera que quedara de la siguiente manera:

LINEA 1|||||||||
LINEA 2 |||||||||||||||||
LINEA 3 |||||||||||||

Es decir, borrar desde la palabra "BORRAR" en adelante hasta el salto de linea en todos los renglones y eliminar los espacios entre los "|" sobrantes. Actualmente realizo este proceso manualmente editando el archivo desde bloc de notas, intente automatizarlo con comandos de shell pero no tuve éxito, ¿Alguien podría ayudarme?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de italo_pm
Val: 997
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por italo_pm (144 intervenciones) el 27/04/2019 16:07:17
Hola

Si bien php y otros lenguajes permiten editar los files txt, no es necesario utlizarlos...

en todo caso, puedes resolver como alternativas al bloc de notas, con excel, tambien con pspad (open), notepad++ o tambien con ultraedit que estan hechos para lo que necesitas...

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 29/04/2019 15:46:57
Te refieres a hacer una macro en excel para automatizar el proceso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de italo_pm
Val: 997
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por italo_pm (144 intervenciones) el 29/04/2019 17:04:51
Sin necesidad de hacer una macro, basta que reemplaces BORRAR* (se le agrega * para que borre todo hasta el final de la linea) y lo reemplazas con "nada" o sea, dejas vacio el campo.

1
2
3
4
5
6
7
8
9
10
11
12
13
abre excel
 
pegas tus lineas
 
luego ve a la opcion Buscar y seleccionar
 
luego haces clic en Reemplazar.
 
en buscar escribes: BORRAR*
 
y en reemplazar con: dejas vacio
 
luego clickas en reemplazar todo

el problema aqui es que si se encuentra la palabra BORRAR como contenido del texto y no como palabra "clave" pues te borrar desde el primer BORRAR...

pureba a manera de ejemplo.

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 30/04/2019 00:26:52
Entiendo, muchas gracias por tu respuesta, lo que necesito es un scrip que haga el proceso automáticamente sin necesidad de realizar el procesos manualmente en un editor de textos o excel ya que es lo que hago actualmente
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 27/04/2019 19:27:50
Sí, claro que se puede.

Lo que puedes hacer es leer el archivo, reemplazar las cadenas que buscas por cadenas vacías y volver a escribirlo.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
$inputFileName = $argv[1];
 
echo 'Leyendo el archivo "'.$inputFileName.'"'.PHP_EOL;
$source = file_get_contents( $inputFileName );
 
$toBeRemoved = $argv[2];
echo 'Eliminando el string "'.$toBeRemoved.'"'.PHP_EOL;
 
$target = str_replace( $toBeRemoved, '', $source );
echo 'Resultado: '.PHP_EOL.$target.PHP_EOL;

Después, para ejecutarlo:

1
php test.php texto.txt BORRAR

Suponiendo que el texto que pusiste está en el archivo texto.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 29/04/2019 16:53:12
Hola, muchas gracias por tu ayuda.

No se debe declarar el nombre del archivo en el código? Lo que necesito hacer es que borre a partir de la palabra borrar hasta el salto de linea en todos los renglones, las lineas originalmente se generan en este formato y cabe mencionar que siempre son distintos en cuanto a contenido y numero de caracteres:

LINEA1 [TEXTO]| | | | | | | | | | | | | | | | | | | | | BORRAR| | | | | | | | |
LINEA2 [TEXTO]| | | | | | | | | | | | | | | | | | | | | | | | | | | | BORRAR| | | | | | | | |

Con este script de powershell logre eliminar los espacios entre los "|"

1
Get-ChildItem 'C:\Users\eduardo.mora\Desktop\Nuevo_texto.txt' -Recurse | ForEach { (Get-Content $_ | ForEach { $_ -replace ' ', '' }) | Set-Content $_ }

Las lineas me quedan de la siguiente manera:

LINEA1[TEXTO]|||||||||||||||BORRAR|||||||||
LINEA1[TEXTO]||||||||||||||||||||||BORRAR|||||||||

Lo único que me falta es borrar a partir de la palabra BORRAR hasta el salto de linea en todos los renglones pero sinceramente no tengo idea de como hacerlo, es decir borrar esto: "BORRAR|||||||||"

Espero que me puedas seguir apoyando con este tema por favor, muchas gracias :)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 29/04/2019 17:08:58
Ya veo.

Respecto del tema de los nombres de archivos, en mi ejemplo los tomé como parámetros de la línea de comandos pero es lo mismo, puedes tenerlos fijos en el código, pedirlos interactivamente usando readline o lo que te resulte cómodo.

El código sería algo como:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
 
$inputFileName = $argv[1];
 
echo 'Leyendo el archivo "'.$inputFileName.'"'.PHP_EOL;
$sourceLines = file( $inputFileName );
 
$marker = $argv[2];
echo 'Eliminando a partir del string "'.$marker.'"'.PHP_EOL;
 
$targetLines = [];
 
foreach ( $sourceLines as $line ) {
        $pos = strpos( $line, $marker );
        $targetLines[] = substr( $line, 0, $pos  );
}
 
echo 'Resultado: '.PHP_EOL.print_r( $targetLines, 1).PHP_EOL;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 30/04/2019 00:19:40
Al ejecutar el script desde cmd me arroja el siguiente error y no modifica el .txt (adjunto la captura de pantalla)

La primera vez que lo ejecute me arrojo este error:

Deprecated: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior in C:\wamp\bin\php\php7.3.1\edita_txt.php on line 14
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 30/04/2019 13:19:20
El error que te da es porque no existe el archivo "nuevo_texto.txt" en el directorio donde estás ejecutando el script por un lado y por el otro, te falta indicar cuál es el string que sirve de delimitador (BORRAR en este caso).

La llamada debería ser así:

1
php edita_txt.php nuevo_texto.txt BORRAR

Pero lo importante es que el archivo nuevo_texto.txt exista y esté en el directorio C:\wamp\bin\php\php7.3.1\ (O si no, le puedes indicar la ruta completa haciendo una llamada tipo: php edita_txt.php "C:\Mis Documentos\nuevo_texto.tx" BORRAR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 30/04/2019 15:54:44
Muchas gracias, si me funciono con el ejemplo que te mande, pero al aplicarlo en el archivo que necesito editar (lo anexo) me genera el siguiente resultado:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
C:\wamp\bin\php\php7.3.1>php edita_txt.php Fac.txt BORRAR
Leyendo el archivo "Factura_.txt"
Eliminando a partir del string "BORRAR"
Resultado:
Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
    [10] =>
    [11] =>
    [12] =>
    [13] =>
    [14] =>
    [15] =>
    [16] =>
    [17] =>
    [18] =>
    [19] =>
    [20] =>
    [21] =>
)

¿Y como puedo hacer para que me guarde el archivo TXT ya con los cambios?, es decir ya sin la palabra borrar y sin los espacios entre |.
En verdad agradezco tu apoyo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 30/04/2019 19:26:20
Te paso una nueva versión del código:

1
2
3
4
5
6
7
8
<?php
$sourceLines = file( $argv[1] );
$marker = $argv[2];
 
foreach ( $sourceLines as $line ) {
        $pos = strpos( $line, $marker );
        echo substr( $line, 0, $pos  ).PHP_EOL;
}

Para guardarlo en un archivo sólo necesitas redireccionar la salida estándar:

1
php edita_txt.php Fac.txt BORRAR > texto_filtrado.txt
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 30/04/2019 20:43:23
Con este código no me arroja nada y genera un archivo TXT vacio
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
C:\wamp\bin\php\php7.3.1>php editar3.php Fac.txt BORRAR
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
C:\wamp\bin\php\php7.3.1>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 30/04/2019 21:25:03
Pues... hay algo de información que me falta me temo... lo probé en mi computadora (Linux) y funcionaba perfecto... ¿cómo es el archivo de entrada?

Edit: lo que se me ocurre es que esté fallando porque no encuentra el delimitador...

Prueba con

1
2
3
4
5
6
7
8
<?php
$sourceLines = file( $argv[1] );
$marker = $argv[2];
 
foreach ( $sourceLines as $line ) {
        $pos = strpos( $line, $marker );
        echo ( $pos ? substr( $line, 0, $pos ).PHP_EOL : $line );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 02/05/2019 16:09:39


Al ejecutarlo e da este resultado lo cual esta bien porque asi lo puedo guardar tal cual en un TXT, pero no borra estos fragmentos "Borrar||||||||||||||||||||||||||||||||||||||||||||||" al final de cada linea

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
C:\wamp\bin\php\php7.3.1>php edtxt.php Fac.txt BORRAR
[H1F_Comprobante]|3.3|B|2254|2018-08-30T08:25:45|99||47500.00|0.00|MXN|1|55100.00|I|PPD|02700|NO/NO||||||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||
[H1C_Comprobante]|PPG-35||||1564283|2011|Original|||16.0000|0.0||0.00|||||||||||||||I|P|CINCUENTAYCINCOMILCIENPESOS00/100M.N.||||||||||||||||||||||FACTURACOMERCIAL|||||||||||||Borrar||||||||||||||||
[H2F_CfdiRelacionados]|||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H2C_CfdiRelacionados]|||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H2-1F_CfdiRelacionado]|||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H2-1C_CfdiRelacionado]|||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H3F_Emisor]|IPE8908219D4|IndustriasPear,S.A.deC.V.|601|||||||||||||||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H3C_Emisor]|||||53593518||||||||||||||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||
[H3-1C_EmisorDomFiscal]|Democracias|61-C||ColSanMiguelAmantla|Azcapotzalco||Azcapotzalco|CiudaddeMexico|Mexico|02700|||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H3-2C_EmisorDomExped]|IndustriasPear,S.A.deC.V.|IPE8908219D4||Democracias|61-C||ColSanMiguelAmantla|Azcapotzalco||Azcapotzalco|CiudaddeMexico|Mexico|02700||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H4F_Receptor]|PAM781201CW0|ProductosAlimenticiosLaModernaSACV|||G03||||||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H4C_Receptor]|||||||||||||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H4-1C_ReceptorDom]|LeandroValleNExt.404-200|ReformayFerrocarrilesNacionales|||Toluca||Toluca|EstadodeMexico|Mexico|50070|||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[H4-2C_ReceptorEntrega]||PAM781201CW0|0000||||||||||||||||||||||||||||||||Borrar||||||||||||||||||||||||||||||||||||||||||||||
[D1F_Detalle]|73151904||95.0000|H87|PZ|BotaderoExhibidorFaldonesyCopeteImpresosenCorroplastde3mmOP11403|500.0000|47500.0000|0.00|||||||||||||||||||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||
[D1F_Detalle]|73151904||-95.0000|H87|PZ|BotaderoExhibidorFaldonesyCopeteImpresosenCorroplastde3mmOP11403|500.0000|-47500.0000|0.00|||||||||||||||||||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||
[D1C_Detalle]|||||||||||||95.000||95.00|47500.00|47500.0000|0.0||0.00|||||||||||||16.0000|7600.0000|||||||||||||||||||PPG-35||||||||||||||||||||||||||||
[D1C_Detalle]|||||||||||||-95.000||-95.00|47500.00|-47500.0000|0.0||0.00|||||||||||||16.0000|-7600.0000|||||||||||||||||||PPG-35||||||||||||||||||||||||||||
[D2F_ImpTrasladosTraslado]|47500.00|002|Tasa|0.160000|7600.00|||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[I1F_Impuestos]||7600.00||||||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[I3F_Trasladado]|002|Tasa|0.160000|7600.00||||||Borrar|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[SC_Sumario]|47500.00|0.00|||||7600.00||55100.00|47500.00|0.0000|16.0000|||||||||||||||||||||||47500.00|||||||||||||||||Borrar|||||||||||||||||||||||||||||
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 02/05/2019 18:51:30
El problema es que en el archivo original dice Borrar, no BORRAR...

Prueba con este comando:

1
php edtxt.php Fac.txt Borrar

O cambia la función strpos por stripos:

1
2
3
4
5
6
7
8
<?php
$sourceLines = file( $argv[1] );
$marker = $argv[2];
 
foreach ( $sourceLines as $line ) {
        $pos = stripos( $line, $marker );
        echo ( $pos ? substr( $line, 0, $pos ).PHP_EOL : $line );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 02/05/2019 23:53:28
Muchas gracias, funciono a la perfección.

Una ultima consulta, ¿podría utilizar trim o str_replace para borrar los espacios entre los "|" ? y asi ya no utilizar mi scrip de Powershell para ese proceso
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 03/05/2019 19:37:51
Prueba con:

1
2
3
4
5
6
7
8
9
<?php
$sourceLines = file( $argv[1] );
$marker = $argv[2];
 
foreach ( $sourceLines as $line ) {
        $line = str_replace( '| ', '|', $line);
        $pos = stripos( $line, $marker );
        echo ( $pos ? substr( $line, 0, $pos ).PHP_EOL : $line );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 03/05/2019 20:22:13


No funciono, no quita los espacios entre los | ó como puedo mandar llamar mi script de powershell para que se ejecute en el mismo script de php?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 1.624
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Mauro (453 intervenciones) el 03/05/2019 23:14:27
¿Puedes mostrar una captura de pantalla de cómo estás ejecutándolo?

A mi me funciona bien...

UX2HvbG
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo
Val: 39
Ha disminuido su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Borrar fragmentos de linea y modificar archivo.txt

Publicado por Eduardo (12 intervenciones) el 04/05/2019 00:43:01
Si, claro. Lo ejecuto de esta manera:

Captura-de-pantalla-6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar