0Pricing
Go Academy · درس

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 أو ReadAll
  • csv.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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مراجعة encoding/json
  2. encoding/xml
  3. encoding/csv
  4. gob والترميز الثنائي
← العودة إلى Go Academy