كيف يمكنني مسح الأحرف المطبوعة في تطبيق وحدة التحكم(لينكس)?

StackOverflow https://stackoverflow.com/questions/430713

سؤال

أنا إنشاء وحدة صغيرة التطبيق الذي يحتاج إلى شريط التقدم.شيء من هذا القبيل...

Conversion: 175/348 Seconds   |==========          |  50%

سؤالي هو كيف يمكنك محو شخصيات طبعت بالفعل إلى وحدة ؟ عندما تصل إلى 51 مئوية ، علي أن يمحو هذا الخط من وحدة التحكم إدراج سطر جديد.في الحل الحالي, هذا هو ما يحدث...

Conversion: 175/348 Seconds   |==========          |  50%
Conversion: 179/348 Seconds   |==========          |  52%
Conversion: 183/348 Seconds   |==========          |  54%
Conversion: 187/348 Seconds   |===========         |  56%

الكود الأول هو استخدام...

print "Conversion: $converted_seconds/$total_time Seconds   $progress_bar  $converted_percentage%\n";

أنا أفعل هذا في لينكس باستخدام بي إتش بي(فقط سوف تستخدم التطبيق لذا يرجى عذر اختيار اللغة).لذا فإن الحل يجب أن تعمل على منصة لينكس - ولكن إذا كان لديك حل هذا عبر منصة, التي من شأنها أن تكون الأفضل.

هل كانت مفيدة؟

المحلول

وأنا لا أعتقد أنك بحاجة للاعتذار لاختيار اللغة. PHP هي لغة عظيمة للتطبيقات وحدة التحكم.

وجرب هذا:

<?php
for( $i=0;$i<10;$i++){
  print "$i \r";
  sleep(1);
}
?>

وو"\ ص" سوف الكتابة فوق خط مع النص الجديد. لجعل خط جديد يمكنك فقط استخدام "\ ن"، ولكن انا التخمين كنت أعرف مسبقا أن.

وآمل أن يساعد هذا! أعرف أن هذا يعمل في لينوكس، ولكن أنا لا أعرف ما اذا كان يعمل في Windows أو أنظمة التشغيل الأخرى.

نصائح أخرى

لمحو سابقا مطبوعة الشخصية لديك ثلاثة خيارات:

  • echo chr(8) . " "; أصداء الظهر حرف, و سينتقل المؤشر إلى الوراء مكان واحد و الفضاء ثم الكتابة فوق الحرف.يمكنك استخدام chr(8) عدة مرات في صف واحد إلى الخلف شخصيات متعددة.

  • echo "\r"; عودة المؤشر إلى بداية السطر الحالي.يمكنك الآن استبدال الخط مع النص الجديد.

  • الخيار الثالث هو وضع خط عمود من موضع رأس المؤشر باستخدام هروب ANSI رموز ، ثم طباعة استبدال الأحرف.قد لا يعمل مع جميع المحطات:

  function movecursor($line, $column){
      echo "\033[{$line};{$column}H";
  }

لم خدعة.

للرجوع إليها في المستقبل ، \b لا يعمل في PHP في لينكس.كان من الغريب - حتى فعلت ذلك عدة تجارب في لغات أخرى أيضا(أنا فعلت هذا في لينكس - أنا لا أعرف إذا كانت النتيجة سوف تكون هي نفسها في ويندوز/ماك)..

\ب يعمل في...

  • بيرل
  • روبي
  • Tcl - مع رمز puts -nonewline "Hello\b"

\b لا يعمل في

  • PHP - مدونة print "Hello\b"; يطبع Hello\b
  • الثعبان رمز print "Hello\b" يطبع Hello<new line> .نفس النتيجة مع print "Hello\b",

وأنا لست متأكدا ما اذا كان نفس الشيء في لينكس ولكن في تطبيقات وحدة التحكم ويندوز يمكنك طباعة \ r و سوف المؤشر يعود إلى المركز الأول الأيسر من الخط مما يتيح لك الكتابة عن الشخصيات إلى اليمين.

ويمكنك استخدام \ ب إلى الخلف حرف واحد ولكن منذ كنت على وشك أن تحديث ملفك شريط التقدم \ ص سيكون أسهل استخداما من طباعة \ ب × عدد من المرات.

ويبدو أن هذا موضوع قديم جدا ولكنني لن تسقط بلدي 5 إلى.

for ($i; $i<_POSITION_; $i--) {
   echo "\010"; //issue backspace 
}

وجدت هذا على شبكة الانترنت منذ بعض الوقت، للأسف لا أتذكر أين. لذلك كل الاعتمادات يذهب إلى المؤلف الأصلي.

لمسح حرف المطبوعة سابقا، I طباعة مسافة للخلف بعد ذلك: طباعة "أ" طباعة "\ ب"

وستطبع <م> لا شيء (في الواقع فإنه سيتم طباعة وثم مسافة للخلف، ولكن ربما لن تلاحظ ذلك)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top