Jump to content
Unity Insider Forum
Sign in to follow this  
Kojote

Inconsistend line endings

Recommended Posts

Grüße!

Ich habe mir einen kleinen Editor-Zusatz geschrieben, der mir eine CS-Datei schreibt. Wenn ich dies nun mache, kommt er mir mit dieser gelben Fehlermeldung:

There are inconsistent line endings in the 'Assets/EMM/Scripts/EMM_Enum_List.cs' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.
UnityEditor.AssetDatabase:ImportAsset(String)
EMM.EMM_Editor_Methods:WriteStringToEnum(String, String, String, ICollection`1) (at Assets/Editor/EMM_Editor_Methods.cs:35)
EMM.EMM_Enum_Writer:OnInspectorGUI() (at Assets/Editor/EMM_Enum_Writer.cs:23)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)

Problem hierbei ist, dass die CS-Datei zwar richtig geschrieben und erstellt wird, jedoch aus irgend einem Grund der Writer noch eine Leere Zeile nach der letzten geschlossenen geschweiften Klammer anfügt. Das stört hier. Kann man dies irgendwie verhindern?

Hier mal dir Writer-Datei:

        public static void WriteStringToEnum<T>(string path, string fileName, string enumName, ICollection<T> data) {
            if (!Directory.Exists(path)) {
                Directory.CreateDirectory(path);
            }

            using (StreamWriter file = File.CreateText(path + fileName + extension)) {
                file.WriteLine("using UnityEngine;\n");
                file.WriteLine("namespace EMM {");
                file.WriteLine("public class " + fileName + " : MonoBehaviour {");
                file.WriteLine("public enum " + enumName + " {\n");

                int i = 0;

                foreach (var line in data) {
                    string lineRep = line.ToString().Replace(" ", string.Empty);
                    if (!string.IsNullOrEmpty(lineRep)) {
                        file.WriteLine(string.Format("\t{0} = {1},",
                            lineRep, i));
                        i++;
                    }
                }

                file.WriteLine("\n}\n}\n}");
                file.Close();
            }

            AssetDatabase.ImportAsset(path + fileName + extension);
        }

Grüße von Kojote

Share this post


Link to post
Share on other sites

Keine Ahnung, wo er den letzten Zeilensprung her holt. Aber ich würde mir da echt keinen Kopp machen. Das hatte Unity in der 5er Version auch ständig selbst gemacht, wenn du ein neues Script erzeugt hattest.

Es hat glaube ich etwas mit CHR$(10) und CHR$(13) zu tun. 10 ist eine neue Zeile (\n) und 13 ist carriage-return (\r). Das sind uralte Befehle für die Typewriter bzw. Telefax Systeme, die immer noch unterschiedlich gehandhabt werden, (Unix,Linux zu Windows).
Du nutzt ja den WriteLine Befehl. Brauchst du da denn \n überhaupt. Würde er nicht sowieso jedes Mal ne neue Zeile generieren?

Du kannst auch \n\r nutzen, denn \r würde dann den Wagenrücklauf machen (carriage-return).
Probier mal beide Varianten aus.
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×