7

In the process of editing my scripts' variable names with a haphazard "replace in all open files" in my text editor, I accidentally replaced portions of graphics data in a notebook (and I believe this is the only issue with the notebook). Here's a sample of my notebook in my text editor:

Cell[BoxData[
  Graphics3DBox[GraphicsComplex3DBox[$Failed, {{
   {Opacity[0.4], EdgeForm[None], 
     GraphicsGroup3DBox[{Polygon3DBox[CompressedData["
1:eJxNnXeYFcXz9e/esIiiIFGUKNw7d0Ewo0y4CIKKAdDdvYqKAQOKOWfFnHPO
OWdRMSsgmHPOIKhgzgnR93z29Pf5vX/M0zU93T09Mz3d1VWnqvpP3m+rffO5
...
SIz7Av/VL5TBhqJPyesWaxZ5/ULdD6rGk39asT0GPMtTShc12+f3763GSrJP
eEPn42ueVxM9322Z2wHfOz3zHo292vZgj0rBN2yz/cX+qXbWVt46Op7\[CapitalOmega]2S8X
PkPQO5K3ZsifUHP+JrF9m+Lj9FXWmcR2+a8n3i/jAwIM6OiS8aPgNuKQzz76
4cx7TXSVD2Teu+MDFhwgfljAOT2aud6Wsf2U0A54IVLaBUP0ZtX22vhBf67Z

The \[CapitalOmega] doesn't belong. Unfortunately, "undo" is no longer available, and there's no obvious way for me to sift through and re-replace some of the symbols that I changed (for instance, they aren't all obvious like \[CapitalOmega]). Mathematica can no longer open the notebook (I wait while it grinds and heats-up, then have to force-quit).

Is there some way to delete the graphics (or even all output cells) from the text file? I was considering just trying this (deleting the cells that seem like graphics), but it seems like there might be a lot of ways this could go wrong. Help!

Rico Picone
  • 885
  • 1
  • 5
  • 12

1 Answers1

9

This should give you back most of your work:

code = Import[
   "https://bitbucket.org/ricopicone/corruptmathematicanotebook/raw/master/CMN.nb", 
   "NB"];
CreateDocument[
 code /. Cell[BoxData[(Graphics3DBox | GraphicsBox)[___]], ___] :> 
   Cell[TextData[
     StyleBox["Here was a graphics", FontColor -> RGBColor[1, 0, 0]]],
     "Text"]]
Rico Picone
  • 885
  • 1
  • 5
  • 12
halirutan
  • 112,764
  • 7
  • 263
  • 474
  • This is great. Thanks! If beggars could be choosers, it would be nice if other types of cells would be preserved, like text and sections (I tried and failed to adapt your example). – Rico Picone May 13 '14 at 22:38
  • 1
    @RicoPicone Please try the updated version of my answer. – halirutan May 13 '14 at 22:59
  • Beautiful! This is a great bit of code, you've written. Thank you :) – Rico Picone May 13 '14 at 23:01
  • For posterity I made a new (simpler) corrupted notebook and put it on bitbucket. I'm going to edit the answer to get it from there (I'll leave it up). This notebook doesn't crash MMA, but the graphics are bad, and I think it's sufficient to demonstrate the point. – Rico Picone May 13 '14 at 23:25
  • 1
    Some people might find it useful to simply "do away" with the output graphics cells altogether, instead of replacing them with Text cells (so they can just re-evaluate the input cells and no pesky text cells will be laying about). If that's the case, the replacement rule should point to :> Cell["", "Output"]. – Rico Picone May 13 '14 at 23:40
  • @RicoPicone You can edit my answer again if you think future visitors will benefit from it. I will happily accept the edit. – halirutan May 13 '14 at 23:41
  • halirutan, I don't know what others will want to do with it. It's kind-of nice to have a record of where the graphic was. I think I'll leave it so that others can choose for themselves. Thanks, though. – Rico Picone May 13 '14 at 23:45