encoding/csv
اقرأ CSV واكتبه
encoding/csv درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما هو CSV
يخزّن CSV (القيم المفصولة بفواصل) البيانات الجدولية كنص عادي، بحيث يكون لكل سجل سطر وتُفصل الحقول بفواصل. وتقرأ حزمة Go encoding/csv هذه البيانات وتكتبها.
القراءة من سلسلة نصية
أنشئوا قارئًا من أي io.Reader. تغلّف strings.NewReader سلسلةً نصية، لذا يمكننا تقديم عرض توضيحي من دون ملف.
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a,b,c"))
rec, _ := r.Read()
fmt.Println(rec)
}قراءة جميع السجلات
تقرأ ReadAll كل صف في [][]string. وتمثل كل شريحة داخلية حقول سجل واحد.
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
data := "name,age\nAnn,30\nBob,25"
r := csv.NewReader(strings.NewReader(data))
records, _ := r.ReadAll()
fmt.Println(records)
}القراءة صفًا تلو الآخر
بالنسبة إلى الملفات الكبيرة، اقرأوا سجلًا واحدًا في كل مرة باستخدام Read. وتُرجع io.EOF عند الانتهاء.
package main
import (
"encoding/csv"
"fmt"
"io"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a,1\nb,2"))
for {
rec, err := r.Read()
if err == io.EOF {
break
}
fmt.Println(rec)
}
}الوصول إلى الحقول
كل سجل هو شريحة من السلاسل النصية. استخدموا الفهرسة فيه لقراءة عمود.
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("Ann,30"))
rec, _ := r.Read()
fmt.Println("name:", rec[0], "age:", rec[1])
}محدِّد مخصص
اضبطوا r.Comma لاستخدام فاصل مختلف، مثل الفاصلة المنقوطة أو علامة الجدولة.
package main
import (
"encoding/csv"
"fmt"
"strings"
)
func main() {
r := csv.NewReader(strings.NewReader("a;b;c"))
r.Comma = ';'
rec, _ := r.Read()
fmt.Println(rec)
}كتابة CSV
تكتب csv.NewWriter السجلات. استدعوا Flush لدفع البيانات المخزنة مؤقتًا إلى الخارج.
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"name", "age"})
w.Write([]string{"Ann", "30"})
w.Flush()
}كتابة صفوف كثيرة
تكتب WriteAll كائن [][]string كاملًا دفعة واحدة، وتُجري التفريغ تلقائيًا.
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
rows := [][]string{{"a", "1"}, {"b", "2"}}
w.WriteAll(rows)
}وضع علامات الاقتباس تلقائيًا
يضع الكاتب علامات اقتباس حول الحقول التي تحتوي على فواصل أو علامات اقتباس أو أسطر جديدة، ولذلك يظل الإخراج CSV صالحًا.
package main
import (
"encoding/csv"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"hello, world", "plain"})
w.Flush()
}لا تنسوا Flush
يخزّن الكاتب البيانات مؤقتًا. إذا نسيتم Flush ولم تستخدموا WriteAll، فقد لا تُكتب بعض الصفوف أبدًا. أجروا التفريغ دائمًا قبل انتهاء البرنامج.
معالجة الأخطاء
بعد إجراء التفريغ، تحققوا من w.Error() لالتقاط أي أخطاء كتابة حدثت أثناء التخزين المؤقت.
package main
import (
"encoding/csv"
"fmt"
"os"
)
func main() {
w := csv.NewWriter(os.Stdout)
w.Write([]string{"x", "y"})
w.Flush()
fmt.Fprintln(os.Stderr, w.Error())
}تحقق سريع
ماذا تُرجع ReadAll الخاصة بقارئ CSV للبيانات التي جرى تحليلها؟
مراجعة
encoding/csv:
csv.NewReaderمعReadأوReadAllcsv.NewWriterمعWrite/WriteAll، ثمFlush- اضبطوا
Commaللمحدِّدات المخصصة؛ ويجري وضع علامات الاقتباس تلقائيًا
الأسئلة الشائعة
هل درس «encoding/csv» مجاني؟
نعم — نص درس «encoding/csv» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «encoding/csv»؟
اقرأ CSV واكتبه تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «encoding/csv»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.