2017-09-15 32 views
1

我有一個字符串file,我想刪除它的一些行。當我使用一些字符串函數delete,replace,gsub,clear等我得到我的字符串變量爲原始狀態。無法修改字符串的行

例如:

file 
# => "#include <hidef.h> /* for EnableInterrupts macro */\r\n#include \"derivative.h\" /* include peripheral declarations */\r\n\r\n#ifdef __cplusplus\r\nextern \"C\"\r\n#endif\r\nvoid MCU_init(void); /* Device initialization function declaration */\r\n/*    >> 2 <- izquierda\r\n Orden de leds 1 3 4 7\r\n    0 2 4 6\r\n    -> Derecha << 2*/\r\n\r\nunsigned short i;\r\nchar time;\r\nint estado=0;\r\nint cambio=0;\r\nint izquierda;\r\nint sec1; //1= secuencia 0-2-4-6-7-5-3-1\r\n   //0= secuencia 0-1-3-5-7-6-4-2\r\nvoid delay_ms(int time) {\r\n \r\n for (i = 0xFFFF; i > 0; i--)\r\n  ;\r\n \r\n}\r\nvoid main(void) {\r\n MCU_init(); /* call Device Initialization */\r\n /* include your code here */\r\n PTBDD = 0XFF; //Configuración del PORTB como salida\r\n PTBD_PTBD0=1;\r\n PTCDD_PTCDD0=0; //pulsador como entrada\r\n PTCPE_PTCPE0=1; //pull-up\r\n izquierda=0;\r\n \r\n for (;;) {\r\n  if (PTCD_PTCD0==0){\r\n   for (time=0x0F;i>0;i--); // lo aprete\r\n   while(!PTCD_PTCD0);\t//sigo apretando\r\n   for (time=0x0F;i>0;i--); //lo solte\r\n   apreto=0;\r\n   if (sec1==1) sec1=0;\r\n   else sec1=1;\r\n   switch (PTBD){\r\n    case 0x40:\r\n     if (sec1==1){\r\n      PTBD=0x80;\r\n      izquierda=1;}\r\n     else PTBD=PTBD >> 2;\r\n    break;\r\n     \r\n    case 0x02:\r\n     if (sec1==1){\r\n      PTBD=0x01;\r\n      izquierda=0;}\r\n     else PTBD=PTBD << 2;\r\n    break;\r\n    \r\n    case 0x80:\r\n     if (sec1==0){\r\n      PTBD=0x40;\r\n      derecha=0;}\r\n     else PTBD=PTBD >> 2;\r\n    break;\r\n    \r\n    case 0x01:\r\n     if (sec1==0){\r\n      PTBD=0x02;\r\n      derecha=1;}\r\n     else PTBD=PTBD << 2;\r\n    break;\r\n    \r\n    default:\r\n     if (sec1==1){\r\n       if (izquierda==0)\r\n        PTBD=PTBD << 2;\r\n       else\r\n        PTBD=PTBD >> 2;}\r\n     else\r\n      if (derecha==0)\r\n       PTBD=PTBD >> 2;\r\n      else\r\n       PTBD=PTBD << 2;\r\n    break;\r\n   }\r\n   \r\n   \r\n  }\r\n }\r\n}\r\n\r\n\r\n" 
file.lines[15] 
# => "int cambio=0;\r\n" 
file.lines[15].replace("") 
# => "" 
file.lines[15] 
# => "int cambio=0;\r\n" 

我怎麼能保存編輯後的字符串的狀態?我也嘗試使用其他變量,但我得到了相同的結果。

回答

3

當您調用.lines方法。它實際上是返回一個數組(行),它是原始字符串的副本(變量file中的內容)。因此,無論file.lines所做的更改都不會回到file

因此,要改變字符串的15號線,你可能想試試這個:

lines = file.lines 
lines[15].replace("") 
file = lines.join("\r\n") + "\r\n" # this line does the work! 
+0

OMG這就是工作完全 –

+2

注意,線條仍然包含了換行。 'lines.join(「\ r \ n」)'因此會在每行之間添加一個空行。你必須通過'lines.join'連接它們,即沒有分隔符。 – Stefan