encontrar numero y remplazarlo por otro en archivo .txt????
-
miércoles, 22 de agosto de 2012 5:42
hola un saludo para la comunidad...
me encuentro en la siguiente situación:
tengo un achivo .txt
en el cual tengo 55,500 renglones
cada renglon tiene como maximo 10 palabras
y cada palabra se conforma de esta forma (ejemplo..)
nombre direccion telefono id contraseña sexo
donde nombre=string de solo letras
direccion=string letras y numeros
telefono=string solo numeros
id=int solo numeros
contraseña=string letras y numeros
sexo=string un numero 1=masculino 2=femenino
el problema es que me pidieron editar renglones y agregar unos mas, entonces como agregue renglones los id que eran secuenciales de menor a mayor ya no son los mismos van cambiando entonces estoy buscando una forma de ir cambiando el id de cada renglón con algún siclo ya sea for u otro..
alguna idea... lo estoy manejando como un archivo de texto(.txt) pero en realidad es un script de sql, que es para insertar artículos a una tabla, dicho script se modifico y se actualizo con mas renglones por eso la necesidad de actualizar el (id) de forma secuencial a todos los artículos..
de antemano gracias....
LOWELLPELIKNO
Todas las respuestas
-
miércoles, 22 de agosto de 2012 11:34
Es posible hacerlo desde c#, pero quiza te sea más rapido y sencillo hacerlo desde SQL Server, importando el txt en una tabla temporal y luego con alguna query transformar como lo necesitas, incluso lo puedes volver a exportar a un txt si lo necesita..
Si necesita mas ayuda, cuentanos.. -
miércoles, 22 de agosto de 2012 11:58Moderador
el problema es que me pidieron editar renglones y agregar unos mas, entonces como agregue renglones los id que eran secuenciales de menor a mayor ya no son los mismos van cambiando entonces estoy buscando una forma de ir cambiando el id de cada renglón con algún siclo ya sea for u otro.
pero este archivo tiene alguna forma de parsear cada dato de cada renglon ? quizas algun separador
porque si es asi recomendaria uses
http://filehelpers.sourceforge.net/
aunque como comenta Ronald seria mejor si piensas en usar una base de datos, por el volumen de info creo que es la mejor opcion, un archivo no es performante
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
miércoles, 22 de agosto de 2012 16:16
gracias por sus respuestas aquí esta el ejemplo de script solo una pequeñísima parte:
IF((SELECT COUNT(*) FROM dbo.cd_medication) = 0) BEGIN BEGIN TRANSACTION SET IDENTITY_INSERT [dbo].[cd_medication] ON INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (1, N'ABACAVIR SULFATE', 403, 6, 33, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (2, N'ABACAVIR SULFATE & LAMIVUDINE', 742, 20, 31, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (3, N'ABACAVIR SULFATE & ZIDOVUDINE & LAMIVUDINE', 1141, 19, 32, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (4, N'ABATACEPT', 5707, 2, 28, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (5, N'ACAMPROSATE CALCIUM', 32, 3, 5, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (6, N'ACARBOSE', 30, 4, 30, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (7, N'ACEBUTOLOL HCL', 25, 6, 56, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (8, N'ACETAMINOPHEN', 14, 2, 12, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (9, N'ACETAMINOPHEN & CAFFEINE & CODEINE PHOSPHATE', 7, 4, 16, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (10, N'ACETAMINOPHEN & CODEINE PHOSPHATE', 21, 4, 19, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (11, N'ACETAZOLAMIDE', 6, 3, 18, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (12, N'ACETYLCYSTEINE', 213, 3, 26, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (13, N'ACETYLSALICYLIC ACID', 0, 0, 7, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (14, N'ACITRETIN', 90, 8, 35, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (15, N'ACYCLOVIR', 118, 7, 28, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (16, N'ADALIMUMAB', 1769, 46, 27, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (17, N'ADAPALENE', 50, 2, 34, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (18, N'ADEFOVIR DIPIVOXIL', 1101, 65, 49, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (19, N'ADENOSINE DEAMINASE', 5228, 2, 5, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (20, N'ALDESLEUKIN', 466, 45, 1, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (21, N'ALEMTUZUMAB', 3822, 2, 12, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (22, N'ALENDRONATE SODIUM', 42, 7, 42, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (23, N'ALENDRONATE SODIUM & VITAMIN D3', 55, 7, 36, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (24, N'ALFACALCIDOL', 38, 4, 45, 1) INSERT [dbo].[cd_medication] ([medication_id], [medication_name], [totpaid], [deduct], [dayssupl], [sub]) VALUES (25, N'ALFUZOSIN HCL', 34, 6, 48, 1) SET IDENTITY_INSERT [dbo].[cd_medication] OFF COMMIT TRANSACTION END
en la parte donde dice VALUES (1,N'XXXX) LO QUE NECESITO CAMBIAR ES EL NUMERO 1 O EL NUMERO QUE SE ENCUENTRE AHI POR EL DEL SICLO FOR DIRIA YO
LOWELLPELIKNO
-
jueves, 23 de agosto de 2012 22:09
using System; using System.Text.RegularExpressions; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string línea; int i = 0; Regex rex = new Regex("VALUES\\s*\\(\\s*\\d+"); while ((línea = Console.ReadLine()) != null) { if (rex.Match(línea).Success) i++; Console.WriteLine(rex.Replace(línea, "VALUES (" + i.ToString())); } } } }
ConsoleApplication1.exe < scriptOrigen.txt > scriptNuevo.txt- Marcado como respuesta Eder CostaOwner viernes, 24 de agosto de 2012 15:01

